Java 如何正确地实现这个涉及两个表之间连接的Spring数据JPA命名查询?

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

我正在使用Spring数据JPA开发Spring应用程序。我使用命名查询方法来实现我的查询。我在尝试实现涉及两个表\实体类之间连接的命名查询时遇到一些困难

我有两个实体类:

1) 房间表示住宿房间:

@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")