Java 如何正确地实现这个涉及两个表之间连接的Spring数据JPA命名查询?
我正在使用Spring数据JPA开发Spring应用程序。我使用命名查询方法来实现我的查询。我在尝试实现涉及两个表\实体类之间连接的命名查询时遇到一些困难 我有两个实体类: 1) 房间表示住宿房间:Java 如何正确地实现这个涉及两个表之间连接的Spring数据JPA命名查询?,java,spring,hibernate,jpa,spring-data-jpa,Java,Spring,Hibernate,Jpa,Spring Data Jpa,我正在使用Spring数据JPA开发Spring应用程序。我使用命名查询方法来实现我的查询。我在尝试实现涉及两个表\实体类之间连接的命名查询时遇到一些困难 我有两个实体类: 1) 房间表示住宿房间: @Entity @Table(name = "room") public class Room implements Serializable { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column
@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;
// CONSTRUCTOR, GETTER AND SETTER METHODS
}
如您所见,此类包含以下字段:
@ManyToOne
@JoinColumn(name = "id_room_tipology_fk", nullable = false)
private RoomTipology roomTipology;
将多个房间实例链接到RoomTipology实例的链接
2) 然后我有RoomTipology实体类:
@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;
// CONSTRUCTOR, GETTER AND SETTER METHODS
}
我想从房间开始检索相关的RoomTipology实例。基本上,我想将此SQL查询转换为Spring数据JPA命名查询:
SELECT *
FROM `room_tipology` rt
INNER JOIN room r
ON rt.id = r.id_room_tipology_fk
WHERE r.id = 7
其中r.id是房间实体的id字段的值
我知道,如果我已经有一个房间对象,我可以通过以下方式获得此信息:
room.getRoomTipology()
但有时我只有房间实例的id,我希望直接检索相关的房间策略对象
如何使用命名查询进行命名?以您认为最好的命名方式命名您的方法,传递roomId而不是room,因为这是您实际的搜索参数,并使用
@Query("select t from Room r join r.roomTypology t where r = :roomId")
按照您认为最好的命名方式命名方法,传递roomId而不是room,因为这是您实际的搜索参数,并使用
@Query("select t from Room r join r.roomTypology t where r = :roomId")
EntityManager#getReference(Room.class,7L)。getRoomTipology()
会做你想做的吗?会EntityManager#getReference(Room.class,7L)。getRoomTipology()
做你想做的吗?我知道我可以用HQL做,但我如何用命名查询做?我知道我可以用HQL做,但如何用命名查询做?
@Query("select t from Room r join r.roomTypology t where r = :roomId")