Java 如何将这个3连接查询转换为SpringDataJPA命名的查询方法?
我不太喜欢Spring数据JPA,我在尝试实现命名查询(由方法名定义的查询)时遇到以下问题 我有以下3个实体类:Java 如何将这个3连接查询转换为SpringDataJPA命名的查询方法?,java,spring,hibernate,spring-data-jpa,named-query,Java,Spring,Hibernate,Spring Data Jpa,Named Query,我不太喜欢Spring数据JPA,我在尝试实现命名查询(由方法名定义的查询)时遇到以下问题 我有以下3个实体类: @Entity @Table(name = "room_tipology") public class RoomTipology implements Serializable{ @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id") private L
@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
}
它表示住宿房间,包含以下注释字段:
@ManyToOne
@JoinColumn(name = "id_accomodation_fk", nullable = false)
private Accomodation accomodation;
最后是住宿实体类:
@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
}
@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
}
但现在我想将其转换为命名查询方法(或者至少使用HQL)
我怎么做?请尝试:
@Repository
@Transactional(propagation = Propagation.MANDATORY)
public interface RoomTipologyDAO extends JpaRepository<RoomTipology, Long> {
List<RoomTipology> findByRooms_Accomodation(Accomodation accomodation);
}
@存储库
@事务性(传播=传播。强制)
公共接口室Tipologydao扩展了JpaRepository{
列出找到的住宿(住宿);
}
Spring数据存储库基础结构中内置的查询生成器机制对于在存储库的实体上构建约束查询非常有用。该机制从方法中剥离前缀find…By、read…By、query…By、count…By和get…By,并开始解析其余部分
在查询创建时,您已经确保解析的属性是托管域类的属性。但是,也可以通过遍历嵌套特性来定义约束
医生:请检查我的答案@AndreaNobili
@Repository
@Transactional(propagation = Propagation.MANDATORY)
public interface RoomTipologyDAO extends JpaRepository<RoomTipology, Long> {
}
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
@Repository
@Transactional(propagation = Propagation.MANDATORY)
public interface RoomTipologyDAO extends JpaRepository<RoomTipology, Long> {
List<RoomTipology> findByRooms_Accomodation(Accomodation accomodation);
}