![](/img/trans.png)
[英]Found shared references to a collection org.hibernate.HibernateException
[英]Caused by: org.hibernate.HibernateException: Found shared references to a collection
我正在運行此異常:
Caused by: org.hibernate.HibernateException: Found shared references to a collection: path.Object.listObjects
這是我的代碼:
Object.java
protected List<ListedObject> listObjects ;
....
@OneToMany(cascade=CascadeType.ALL)
@JoinTable(
name = "object_list",
joinColumns=@JoinColumn(name="object_id", unique=true) ,
inverseJoinColumns=@JoinColumn(name="list_id")
)
public List<Annotation> getListObjects() {
return listObjects;
}
public void setListObjects(List<ListedObject> listObjects){
this.listObjects = listObjects;
}
ListedObject.java
private Object object;
...
@ManyToOne(cascade=CascadeType.MERGE)
@JoinTable(name = "object_list",
joinColumns=@JoinColumn(name="list_id"),
inverseJoinColumns=@JoinColumn(name="object_id"))
public MediaObject getObject() {
return mediaObject;
}
public void setObject(Object object) {
this.object = object;
}
請問有人幫我嗎?
提前致謝!
編輯異常開始時的點:
ctx = new ClassPathXmlApplicationContext("/applicationContext.xml");
這來自:
5088 [main] WARN org.apache.commons.vfs.impl.StandardFileSystemManager - no protocol: VFSproviders.xml
java.net.MalformedURLException: no protocol: VFSproviders.xml
我真的不知道它是什么,但VFSproviders.xml
在項目中,並且它包含:
<?xml version="1.0" encoding="UTF-8"?>
<providers>
<provider class-name="org.apache.commons.vfs.provider.zip.ZipFileProvider">
<scheme name="zip"/>
</provider>
<extension-map extension="zip" scheme="zip"/>
<mime-type-map mime-type="application/zip" scheme="zip"/>
<provider class-name="org.apache.commons.vfs.provider.ftp.FtpFileProvider">
<scheme name="ftp"/>
<if-available class-name="org.apache.commons.net.ftp.FTPFile"/>
</provider>
<default-provider class-name="org.apache.commons.vfs.provider.local.DefaultLocalFileProvider"/>
</providers>
我完全迷失在這一部分,任何幫助都會非常感激。 謝謝
這個問題在過去已經被多次回答了,但是我遇到了一個新的案例,它提出了與多線程相關的異常,並決定在這里發帖,因為這是google搜索異常時的最佳結果之一。
在我的例子中,我在hibernate中包裝了一個簡單的數據結構,然后包裝在我自己的框架(幾個管理器)中,供其他項目使用。 管理員執行所有基本的CRUD操作以及一些查詢和管理會話(或根據設置提供這樣做的界面)。 所有實體都包含一個String to String映射,如果需要,它用於使用其他參數擴展對象。 地圖存儲在單獨的表中。 在一個用例中,管理器在多個線程之間共享,並且僅用於檢索對象。 要檢索的對象ID來自同一個列表,如果線程同時需要相同的對象,則拋出可怕的Found共享引用異常。
我明白背后的原理是這樣的:
在我的所有查詢和對象檢索上使用synchronized似乎已經解決了我的問題。 我建議確保大多數與Hibernate會話的交互都是同步的,特別要小心交易。 希望這有助於任何人遇到同樣的問題。
你不應該在這個連接的OneToMany端使用@OneToMany屬性“mappedBy”而不是指定JoinTable嗎?
根據我的經驗,您可以在關系的擁有方定義關系,並使用自有方的“mappedBy”屬性將其映射回來。
protected List<ListedObject> listObjects ;
@OneToMany(cascade=CascadeType.ALL,mappedBy="Object")
public List<ListedObject> getListObjects() {
return listObjects;
}
public void setListObjects(List<ListedObject> listObjects){
this.listObjects = listObjects;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.