簡體   English   中英

如何避免將與字段關聯的對象列表檢索到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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM