亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Spring-Data 中子對象不與父對象一起獲取

Spring-Data 中子對象不與父對象一起獲取

互換的青春 2023-09-06 14:52:22
我對 Hibernate 很陌生,我已經在父對象和子對象之間設置了 @OneToMany 雙向關系,并期望當我將所有內容保留在數據庫中時,將父對象設置為子對象(因為子對象是關系的所有者)當我使用 ORM 獲取父對象時,我希望也獲取子對象,但作為回報,我看到零個子對象。據我在互聯網上閱讀的內容了解,當我將子對象保留為與父對象的關系的所有者時,完整的 ORM 應該發揮根據預定義關系映射連接兩個對象的魔力。此信息正確嗎?@Entity@Table(name = "stream")@SequenceGenerator(name = "sequence", sequenceName = "stream_id", allocationSize = 1)public class StreamEntity extends EntityWithId {    // @MappedSuperclass with ID     @Column(name = "request_id")    @OneToMany(            mappedBy = "streamEntity",            fetch = FetchType.LAZY    )    private List<RequestEntity> requestEntities = new ArrayList<>();    // getters setters}@Entity@Table(name = "request")@SequenceGenerator(name = "sequence", sequenceName = "request_id", allocationSize = 1, initialValue = 1)public class RequestEntity extends EntityWithId {    // @MappedSuperclass with ID     @JoinColumn(name = "stream_id")    @ManyToOne(fetch = FetchType.LAZY)    private StreamEntity streamEntity;    // getters setters}一些測試:@Testpublic void createStreamWithSeveralStreamTargetsAndDeleteStream() {    List<StreamEntity> streamEntities = createStream(1); // stream object is persisted here    List<RequestEntity> requestEntitySave = createRequest(1, streamEntityCheck);    assertEquals(1, requestEntitySave.size()); // request entity is persisted with the stream object into the database    List<StreamEntity> streamEntities = streamDao.findAll();    assertEquals(1, streamEntities.size());    StreamEntity streamEntity2 = streamEntities.get(0);    streamEntity2.getRequestEntities(); - this collection shows 0}我缺少什么?
查看完整描述

1 回答

?
寶慕林4294392

TA貢獻2021條經驗 獲得超8個贊

由于一級緩存的概念,您創建并保存的初始對象與您加載的對象是同一個實例。由于您沒有將創建的請求實體添加到內存模型中,而只是將其保存到數據庫中,因此內存模型中不存在關系。


為了獲得所需的結果,您需要清除保存和重新加載之間的持久性上下文。


@Test

    public void createStreamWithSeveralStreamTargetsAndDeleteStream() {

        List<StreamEntity> streamEntities = createStream(1); 


        List<RequestEntity> requestEntitySave = createRequest(1, streamEntityCheck);

        assertEquals(1, requestEntitySave.size()); 


        //you need to clear the persistence context here

        //now a db query should execute.

        //Inject the entitymanager to your test @PersistenceContext EntityManager em;

        em.clear();


        List<StreamEntity> streamEntities = streamDao.findAll();

        assertEquals(1, streamEntities.size());

        StreamEntity streamEntity2 = streamEntities.get(0);

        streamEntity2.getRequestEntities(); - this collection shows 0


   }


查看完整回答
反對 回復 2023-09-06
  • 1 回答
  • 0 關注
  • 102 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號