我不是很喜歡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)
我該怎麼辦?
請檢查我的答案@AndreaNobili – ozgur