![](/img/trans.png)
[英]Hibernate LazyInitializationException if entity is fetched in JWTAuthorizationFilter
[英]LazyInitializationException in Hibernate Entity getter
當我對ItemVersionLanguage對象執行Hibernate merge()時,出現“錯誤[org.hibernate.LazyInitializationException](pool-9-thread-1)無法初始化代理-沒有會話:org.hibernate.LazyInitializationException:無法初始化代理-沒有會話”。
但是,當我從中獲取數據時,可以從ItemVersion或ItemVersionLanguage的url正常工作。
我沒有@Transactional包裹merge()所在的代碼。
ItemVersionLanguage.java
@Entity
@Table(name = "item_version_language")
public class ItemVersionLanguage implements java.io.Serializable {
private String url;
private ItemVersion itemVersion;
public void setUrl(String url)
{
this.url = url;
}
@Column(name = "url")
public String getUrl()
{
if(this.url == null)
{
return this.itemVersion.url; //this results in the problem!
}
else
{
return this.url;
}
}
public void setItemVersion(ItemVersion itemVersion)
{
this.itemVersion = itemVersion;
}
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "item_version_obj_id", nullable = false)
public ItemVersion getItemVersion()
{
return this.itemVersion;
}
}
ItemVersion.java
@Entity
@Table(name = "item_version")
public class ItemVersion implements java.io.Serializable {
private String url;
public void setUrl(String url)
{
this.url = url;
}
@Column(name = "url")
public String getUrl()
{
return this.url;
}
}
我做錯什么了嗎?
延遲初始化使變量可以充當代理,可以根據需要獲取其值。 當代碼在關閉檢索實體的會話之后嘗試從變量中讀取時,會發生此錯誤,這使代理無法延遲獲取其值。
您可以使用Hibernate.initialize(itemVersionLanguage.getItemVersion())在關閉會話之前加載代理的值。
有關更多詳細信息,請參見http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/performance.html#performance-fetching-initialization 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.