HibernateException:找到同一集合的两个表示
如果我保存包含以下列表的对象
@OneToMany(cascade=CascadeType.ALL, mappedBy="taskList") @OrderColumn(name="position", nullable=false) public List tasks = new ArrayList();
我得到了例外
org.hibernate.HibernateException: Found two representations of same collection
Play中的代码! 控制器看起来像这样:
TaskList taskList = taskList.findById(taskListId); taskList.add(position, task); taskList.save();
如果我在此块之前插入taskList.refresh()
它可以工作,但位置信息丢失(这会导致其他错误)。
这是一个Hibernate错误还是我的代码有问题?
问题是,Hibernate不支持@OneToMany(mappedBy=...)
和@OrderColumn
。 没有mappedBy
Hibernate使用连接表,一切都按预期工作。 见解释 。
如果您需要保留列表,则可能需要使用@OneToMany对列表进行注释,以便能够持久保存您的实体。
exception“org.hibernate.HibernateException:找到同一集合的两个表示”的另一个原因是实体中重复的getter / setter。
当您尝试修改对象的关联集合时,会发生相同的错误。 例如:
MyObject myObject = myObjectService.get(id); List newTasks = //populate new list of Task here myObject.setTasks(newTasks); myObjectService.saveOrUpdateObject(myObject); // or merge(myObject)
在这种情况下,可以通过以下方式解决:
MyObject myObject = myObjectService.get(id); List newTasks = //populate new list of Task here myObject.setTasks(new List ); // or myObject.getTasks().clear(); myObject.getTasks().addAll(newTasks); myObjectService.merge(myObject);
问题是你的加入检查你是否没有填充表中没有的任何数据
- Hibernate Sequence Id Specification
- Hibernate命名查询顺序依据参数
- Hibernate / Toplink在JPA之上提供什么?
- 使用Hibernate通过SSH隧道获取数据
- 为具有生成ID的实体实现equals()时的最佳做法是什么
- org.apache.struts2.json.JSONException:org.hibernate.LazyInitializationException:懒得初始化一个集合
- 是否可以使用Hibernate或JPA Annotations限制@OneToMany集合的大小?
- 尝试访问dao bean时,注入自动连接的依赖项失败
- 使用Hibernate映射整数列表