2016-11-26 100 views
1

我不是很喜歡Spring Data JPA我試圖實現一個命名查詢(由方法名稱定義的查詢)時遇到以下問題。如何將此3 JOIN查詢轉換爲Spring Data JPA命名查詢方法?

我有這3個實體類:

@Entity 
@Table(name = "room_tipology") 
public class RoomTipology implements Serializable{ 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Column(name = "id") 
    private Long id; 

    @Column(name = "tipology_name") 
    private String name; 

    @Column(name = "tipology_description") 
    private String description; 

    @Column(name = "time_stamp") 
    private Date timeStamp; 


    @OneToMany(mappedBy = "roomTipology") 
    private List<Room> rooms; 

    @OneToOne(mappedBy = "roomTipology") 
    private RoomRate roomRate; 

    // GETTER AND SETTER METHODS 
} 

這代表的房間tipology和包含此領域

@OneToMany(mappedBy = "roomTipology") 
private List<Room> rooms; 

所以它包含的空間關聯到一個特定的房間tipology名單,所以我有這個房間實體分類:

@Entity 
@Table(name = "room") 
public class Room implements Serializable { 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Column(name = "id") 
    private Long id; 

    @ManyToOne 
    @JoinColumn(name = "id_accomodation_fk", nullable = false) 
    private Accomodation accomodation; 

    @ManyToOne 
    @JoinColumn(name = "id_room_tipology_fk", nullable = false) 
    private RoomTipology roomTipology; 

    @Column(name = "room_number") 
    private String number; 

    @Column(name = "room_name") 
    private String name; 

    @Column(name = "room_description") 
    @Type(type="text") 
    private String description; 

    @Column(name = "max_people") 
    private Integer maxPeople; 

    @Column(name = "is_enabled") 
    private Boolean isEnabled; 

    // GETTER AND SETTER METHODS 
} 

代表一個房間的住宿的,它包含此annoted領域:

@ManyToOne 
@JoinColumn(name = "id_accomodation_fk", nullable = false) 
private Accomodation accomodation; 

最後的住宿實體類:

@Entity 
@Table(name = "accomodation") 
public class Accomodation implements Serializable { 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Column(name = "id") 
    private Long id; 

    @OneToMany(mappedBy = "accomodation") 
    private List<Room> rooms; 

    @Column(name = "accomodation_name") 
    private String name; 

    @Column(name = "description") 
    @Type(type="text") 
    private String description; 

    // GETTER AND SETTER METHODS 
} 

好了,現在我有這個春季數據JPA倉儲類RoomTipology

@Repository 
@Transactional(propagation = Propagation.MANDATORY) 
public interface RoomTipologyDAO extends JpaRepository<RoomTipology, Long> { 


} 

在這裏,我想定義一個吶MED查詢方法是回到我身邊所有與特定住宿的RoomTipology對象的名單,我一直在使用SQL做到了,它工作正常:

SELECT * 
FROM room_tipology as rt 
JOIN room r 
ON rt.id = r.id_room_tipology_fk 
JOIN accomodation a 
ON r.id_accomodation_fk = a.id 
WHERE a.id = 7 

但現在我想將它在名爲翻譯查詢方法(或至少使用HQL

我該怎麼辦?

+0

請檢查我的答案@AndreaNobili – ozgur

回答

1

請嘗試:內置到Spring數據倉庫基礎設施

@Repository 
@Transactional(propagation = Propagation.MANDATORY) 
public interface RoomTipologyDAO extends JpaRepository<RoomTipology, Long> { 

    List<RoomTipology> findByRooms_Accomodation(Accomodation accomodation); 

} 

查詢生成器機制是在庫的實體建設制約查詢有用。這個機制去掉前綴查找... By,read ... By,query ... By,count ... By,並且得到...從方法開始並開始解析其餘的部分

在創建查詢的時候,你已經確認瞭解析屬性是託管域類的一個屬性。但是,您也可以通過遍歷嵌套屬性來定義約束。

文件:Here

相關問題