2017-08-12 1 views
1

J'ai une requête SQL comme ceci: "Select UIProfileID from UserTable where UPPER(UserID) = UPPER('?1')".Comment faire pour convertir une requête SQL en requête Spring JPA

Je veux le convertir en Spring JPA. Je veux écrire getUIProfileId() et retourner Integer. Mais je ne sais pas comment mettre en œuvre. Parce que la table utilisateur n'a pas UIProfileId colonne qu'il a été joint à partir de UIProfileTable table. S'il vous plaît, aidez-moi à le résoudre. À l'heure actuelle , j'ai tableaux:

User.java

@Entity 
@Getter 
@Setter 
@NoArgsConstructor 
@AllArgsConstructor 
@Builder 
@Table(name = "UserTable") 
public class User { 

    @Column(name = "UserID", length = 32, nullable = false) 
    @Id 
    private String name; 

    @ManyToOne 
    @JoinColumn(name = "DomainID", nullable = false) 
    private Domain domain; 

    @Column(name = "Password", length = 32, nullable = false) 
    private String password; 

    @ManyToOne 
    @JoinColumn(name = "UIProfileID", nullable = false) 
    private UIProfile uiProfile; 

    @Column(name = "ResPerpage", nullable = false) 
    private Integer resperpage; 

    @Column(name = "DefaultTab") 
    private Integer defaulttab; 

    @ManyToOne 
    @JoinColumn(name = "AdminProfile") 
    private AdminProfiles adminProfile; 

    @Column(name = "LanguageId") 
    private Integer languageId; 
} 

UIProfile.java

@Entity 
@Getter 
@Setter 
@Table(name = "UIProfileTable") 
public class UIProfile implements Serializable { 

    @Id 
    @Column(name = "UIProfileID", length = 11, nullable = false) 
    private Integer id; 

    @Column(name = "UIProfileName", length = 32, nullable = false) 
    private String name; 

    @OneToMany(mappedBy = "id.uiProfile") 
    private List<UIProfileTopLevel> topLevels; 
} 

UserRepository.java

public interface UserRepository extends Repository<User, String> { 

    Optional<User> findOne(String name); 

    @Query("Select UIProfileID from User where UPPER(UserID) = UPPER('admin')") 
    Integer getUIProfileId(); 

} 

Répondre

1

Vous pouvez essayer ceci:

@Query("SELECT u.uiProfile.id from User u where UPPER(u.name)=UPPER('admin')") 
Integer getUIProfileId(); 

Ici User est le domaine nom de classe et u est la référence de l'utilisateur. avec u nous allons accéder au champ de l'utilisateur PAS le nom de la colonne qui sont spécifiés avec @Column or @JoinColumn Ex: @JoinColumn(name = "UIProfileID", nullable = false).

+0

Salut, Ajit Soman. Il retournera l'objet UIProfile ne peut pas être converti en java.lang.Integer –

+0

@ Ajit Soman. Je veux obtenir l'ID de UIProfileTable @Column (name = "UIProfileID", longueur = 11, nullable = false) private Integer id ;. –

+0

J'ai édité ma réponse –