![](/img/trans.png)
[英]Can I retrieve a list of object from database with spring and hibernate
[英]How can I avoid to retrieve the list of object associated as field into an Hibernate entity class?
我對Hibernate完全陌生,並且對以下問題有以下疑問:
我有一個映射一個表的實體類,該表包含另一個映射另一個表的實體類作為字段。 我只想檢索與父類有關的信息,而不是與子類有關的信息。
所以我有這個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;
// CONSTRUCTOR, GETTER AND SETTER METHODS
}
如您所見,該類包含以下字段,這些字段表示子實體類及其與Room實體類的連接關系:
@ManyToOne
@JoinColumn(name = "id_room_tipology_fk", nullable = false)
private 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
}
如您所見,該實體類包含以下字段:
@OneToMany(mappedBy = "roomTipology")
private List<Room> rooms;
包含與特定RoomTipology對象關聯的Room對象的列表。
然后,我有一個與RoomTipology實體類相關的Spring Data JPA存儲庫類,其中包含以下查詢方法:
@Repository
@Transactional(propagation = Propagation.MANDATORY)
public interface RoomTipologyDAO extends JpaRepository<RoomTipology, Long> {
@Query("from RoomTipology rt JOIN rt.rooms r WHERE r.id = :roomId")
RoomTipology findByRoomId(@Param("roomId") Long roomId);
}
它可以正常工作,但是我的問題是每次我調用它時,都會這樣:
RoomTipology roomTipologyById = roomTipologyDAO.findByRoomId(7L);
返回的對象還包含與此房間的拓撲相關的房間列表 ,即“ 列出房間”字段。
我的問題是,當我調用先前的findByRoomId(@Param(“ roomId”)Long roomId) DAO方法時,我只需要檢索房間的拓撲信息,而不需要檢索關聯房間的整個列表(我想它將是太重了)。
我可以避免檢索與RoomTipology對象關聯的房間列表嗎? 我該怎么做?
從另一側查詢。 from Room r where r.id=?
這將僅加載所需的房間以及相應的RoomTipology
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.