簡體   English   中英

為什么在ManyToOne關聯中看不到休眠代理對象?

[英]Why am I not seeing hibernate proxy objects in my ManyToOne associations?

根據休眠文檔 ,默認情況下,我的@ManyToOne關系應該具有代理對象。 但是,當我在Eclipse調試器(“變量”視圖)中查看擴展對象時,看起來字段變量是實體類中定義的基本類型的實例。 此外,當我使用hibernate.show_sql=true調用session.get(type, id) ,我可以看到對象上定義的所有@ManyToOne關系的left outer join @ManyToOne

為了讓Hibernate為這些關系創建代理類/對象,是否需要做一些特定的事情? 也許字節碼增強?

引用休眠文檔:

使用Hibernate自己的持久性集合實現來實現集合的懶惰獲取。 但是,單端關聯中的惰性行為需要不同的機制。 協會的目標實體必須被代理。 Hibernate使用運行時字節碼增強功能(通過字節碼提供程序訪問)為持久對象實現延遲初始化代理。

在啟動時,默認情況下,Hibernate會為所有持久類生成代理,並使用它們來實現多對一和一對一關聯的延遲獲取。

默認情況下 ,所有@ManyToOne@OneToOne關聯都為EAGER ,這就是為什么當您獲取根實體時將它們關聯在一起的原因。

僅當關聯未初始化時才使用代理。 要使您的關聯為LAZY,您只需添加LAZY fetch屬性:

@ManyToOne(fetch = FetchType.LAZY)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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