2017-08-12 2 views
1

Ich habe eine SQL-Abfrage wie folgt: "Select UIProfileID from UserTable where UPPER(UserID) = UPPER('?1')".So konvertieren Sie eine SQL-Abfrage in Spring JPA-Abfrage

Ich möchte es in Spring JPA konvertieren. Ich möchte getUIProfileId() schreiben und Integer zurückgeben. Aber ich weiß nicht, wie ich es umsetzen soll. Weil die Benutzertabelle keine UIProfileId Spalte hat, aus der sie von der Tabelle UIProfileTable beigetreten ist. Bitte hilf mir, es zu lösen. Derzeit habe ich Tabellen:

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(); 

} 

Antwort

1

Sie können dies versuchen:

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

Hier User ist der Domain-Klassennamen und u ist die Referenz auf Benutzer. Mit u erreichen wir das Benutzerfeld NICHT den Spaltennamen, die mit @Column or @JoinColumn Ex: @JoinColumn(name = "UIProfileID", nullable = false) angegeben sind.

+0

Hallo, Ajit Soman. Es wird zurückgegeben werden UIProfile Objekt kann nicht in java.lang.Integer –

+0

@ Ajit Soman umgewandelt werden. Ich möchte ID von UIProfileTable @Column erhalten (name = "UIProfileID", length = 11, nullable = false) private Ganzzahl id ;. –

+0

Ich habe meine Antwort bearbeitet –

Verwandte Themen