我正在使用Spring數據JPA使用Spring應用程序。我實施了命名查詢方法來執行我的查詢。我在嘗試實現一個涉及2個表\實體類之間的連接的命名查詢時遇到了一些困難。如何正確地實現這個Spring數據JPA命名查詢,涉及2個表之間的JOIN?
所以我有這2個實體類:
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;
將多個Room實例鏈接到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實體類這個倉庫CLAS,是這樣的:
@Repository
@Transactional(propagation = Propagation.MANDATORY)
public interface RoomTipologyDAO extends JpaRepository<RoomTipology, Long> {
RoomTipology findByRoomTipology_Room(Room room);
}
我有嘗試這種方式,但它不能工作,我得到以下錯誤信息:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'roomTipologyDAO': Invocation of init method failed; nested exception is org.springframework.data.mapping.PropertyReferenceException: No property roomTipology found for type RoomTipology!
我想檢索相關的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,我想直接檢索相關RoomTipology object。
我該如何使用命名查詢來做到這一點?
請問'的EntityManager#getReference(室註釋方法.class,7L).getRoomTipology()'做你想做的事情? – chrylis