Java 如何解决org.hibernate.unUniqueObjectException:具有相同标识符值的不同对象已与会话关联:
我正在使用hibernate保存一个Java 如何解决org.hibernate.unUniqueObjectException:具有相同标识符值的不同对象已与会话关联:,java,hibernate,Java,Hibernate,我正在使用hibernate保存一个列表,但它会引发以下异常: org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: 我正在使用的代码如下所示,但我不知道它为什么会引发异常: public void save(List<UserItem> list) { //getHi
列表
,但它会引发以下异常:
org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session:
我正在使用的代码如下所示,但我不知道它为什么会引发异常:
public void save(List<UserItem> list)
{
//getHibernateTemplate().saveOrUpdateAll(list);
//getHibernateTemplate().deleteAll(list);
sessFactory = getHibernateTemplate().getSessionFactory();
Session session = sessFactory.getCurrentSession();
for (UserItem bean : list) {
session.saveOrUpdate(bean);
}
}
公共作废保存(列表)
{
//getHibernateTemplate().saveOrUpdateAll(列表);
//getHibernateTemplate().deleteAll(列表);
sessFactory=getHibernateTemplate().getSessionFactory();
Session Session=sessFactory.getCurrentSession();
for(UserItem bean:list){
saveOrUpdate(bean);
}
}
保存
列表的正确方法是什么?此错误的主要原因是,列表中有具有相同主键的对象,这意味着两个具有相同主键的对象,但它们不是相同的对象实例
我建议您迭代您的列表并打印您的主键值,然后找出是否有任何对象具有相同的主键值。在调用session.saveOrUpdate(bean)之前,只需将print函数放入for循环中,即可打印每个对象的主键值代码>行。问题是会话中已经存在具有该id的对象,使用“合并”将修复所有问题,但您应该认真研究差异。只要复制这个,它就会工作
public void save(List<UserItem> list)
{
//getHibernateTemplate().saveOrUpdateAll(list);
//getHibernateTemplate().deleteAll(list);
sessFactory = getHibernateTemplate().getSessionFactory();
Session session = sessFactory.getCurrentSession();
for (UserItem bean : list) {
session.merge(bean);
}
}
公共作废保存(列表)
{
//getHibernateTemplate().saveOrUpdateAll(列表);
//getHibernateTemplate().deleteAll(列表);
sessFactory=getHibernateTemplate().getSessionFactory();
Session Session=sessFactory.getCurrentSession();
for(UserItem bean:list){
session.merge(bean);
}
}
关于hibernate持久性相关方法的更多信息,这里有一个很好的来源
我已经更新了您的帖子,但我仍然认为如果您包含以下信息,对其他人会有所帮助:1)哪一行引发异常?(一步一步地浏览代码,看看是否需要。)2)您是否阅读了方法抛出的javadocs?在什么情况下,它声称会抛出,如果有的话?什么是不清楚的?3) 您尝试过哪些其他方法可以提供更多信息?是否可行,以便其他人可以复制?如果是,请发布one.my hibenate属性“”@Java使用backticks`进行代码格式化。看一看markdown引用。@Java我不知道您试图实现的逻辑,但简而言之,merge也会保存或更新。不过,还有更多的细微差别,请查看此问题的答案以了解更多信息:我尝试在db中保存列表,我尝试了getHibernateTemplate().saveOrUpdateAll(列表);列表已保存,但重复项也已保存,我的意思是一个记录显示多次。我的hbm properties user_ITEM_ID_SEQ@Java在使用我发布的代码时是否有问题?这一行在getHibernateTemplate().saveOrUpdateAll(列表);。所以我试着发代码。这也是行不通的