【发布时间】:2017-04-10 19:49:58
【问题描述】:
我不太喜欢 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
}
表示房间的拓扑结构并包含该字段
@OneToMany(mappedBy = "roomTipology")
private List<Room> rooms;
所以它包含与特定房间拓扑相关的房间列表,所以我有这个 Room 实体类:
@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
}
代表一个住宿的房间,它包含这个带注释的字段:
@ManyToOne
@JoinColumn(name = "id_accomodation_fk", nullable = false)
private Accomodation 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
}
好的,现在我有了 RoomTipology 的 Spring Data JPA 存储库类:
@Repository
@Transactional(propagation = Propagation.MANDATORY)
public interface RoomTipologyDAO extends JpaRepository<RoomTipology, Long> {
}
在这里,我想定义一个命名查询方法,它返回给我与特定住宿相关的所有 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
标签: java spring hibernate spring-data-jpa named-query