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); 

问题是你的加入检查你是否没有填充表中没有的任何数据