我正在运行此异常:
Caused by: org.hibernate.HibernateException: Found shared references to a collection: path.Object.listObjects
Run Code Online (Sandbox Code Playgroud)
这是我的代码:
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;
}
Run Code Online (Sandbox Code Playgroud)
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;
}
Run Code Online (Sandbox Code Playgroud)
请问有人帮我吗?
提前致谢!
编辑异常开始时的点:
ctx = new ClassPathXmlApplicationContext("/applicationContext.xml");
Run Code Online (Sandbox Code Playgroud)
这来自:
5088 [main] WARN org.apache.commons.vfs.impl.StandardFileSystemManager - no protocol: VFSproviders.xml
java.net.MalformedURLException: no protocol: VFSproviders.xml
Run Code Online (Sandbox Code Playgroud)
我真的不知道它是什么,但是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>
Run Code Online (Sandbox Code Playgroud)
我完全迷失在这一部分,任何帮助都会非常感激.谢谢
Mik*_*nok 15
这个问题在过去已经被多次回答了,但我遇到了一个新的案例,引发了与多线程相关的异常,并决定在这里发帖,因为这是搜索异常时的最佳结果之一.
在我的例子中,我在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;
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
24416 次 |
最近记录: |