hibernate的保存问题(问题有点急,小女子在此先谢过大家了哈)

时间:2021-07-08 16:56:41
问题描述:
执行:
User user=new User();
user.setName("abc");
userDao.save(user);
我可以打印出ID:System.out.println(user.getId());
但是: 数据库中没有存入我的数据
在此过程中,程序并没有报错。
同样的:我朋友在他电脑*问我的数据库,同样的代码,他能成功保存。

谢谢大家了!
看在女生节的份上,大家帮帮小女子吧!急~~~

48 个解决方案

#1


不给user  id能save?

#2


你看下是不是事务没有提交这类的问题?

#3


我想说,别个连接我的电脑都可以save成功,但是我自己连接就不可以。。。

#4


提供的线索有点少啊,不好判断,妹子,多提供些代码 hibernate的保存问题(问题有点急,小女子在此先谢过大家了哈)

#5


引用 4 楼 l359122505 的回复:
提供的线索有点少啊,不好判断,妹子,多提供些代码 hibernate的保存问题(问题有点急,小女子在此先谢过大家了哈)

救星   您需要哪段代码?

#6


数据库连接配对了吗?

#7


自动提交设置了么?

#8


妹纸啊, 你把你的 IE 缓存和 tomcat 缓存删掉在试试, 或者重启 IDE

#9


妹子 上代码吧。

#10


引用 6 楼 yx3092187 的回复:
数据库连接配对了吗?


引用 7 楼 u010111184 的回复:
自动提交设置了么?


引用 8 楼 Ghost_520 的回复:
妹纸啊, 你把你的 IE 缓存和 tomcat 缓存删掉在试试, 或者重启 IDE


我是直接在后台写代码测试的,就是模拟浏览器访问的我程序。
然后,我朋友在他电脑*问我的tomcat,是可以save成功的。
然后,我本机就比较神奇了。各种无解啊~~

#11


引用 4 楼 l359122505 的回复:
提供的线索有点少啊,不好判断,妹子,多提供些代码 hibernate的保存问题(问题有点急,小女子在此先谢过大家了哈)


引用 9 楼 zhangxiaojie0321 的回复:
妹子 上代码吧。


代码太长了,我就简单概述哈
代码:
Family family=new Family();
System.out.println("family="+family.getId());
familyDao.save(family);
System.out.println("family="+family.getId());
User user=new User();
user.setFamily(family);
userDao.save(user);
报错:
family=:null
Hibernate: insert into Zhijia_Gfamily_T_UserFamily (FamilyCode, FamilyNickName, FamilyNum, RegisterTime, MicroSignal, QQ, SinaTwitterNo, QQTwitterNo, Email, MolbilePhone, Remark, UserID, AvatarUrl) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
family=:44
Hibernate: select familyacco0_.AccountID as AccountID27_, familyacco0_.FamilyID as FamilyID27_, familyacco0_.AccountCode as AccountC3_27_, familyacco0_.NoticeState as NoticeSt4_27_, familyacco0_.CurGoldNum as CurGoldNum27_, familyacco0_.RecGoldNum as RecGoldNum27_, familyacco0_.PreGoldNum as PreGoldNum27_, familyacco0_.Remark as Remark27_ from Zhijia_Gfamily_T_FamilyAccount familyacco0_ order by familyacco0_.AccountID desc limit ?
Hibernate: insert into Zhijia_Gfamily_T_FamilyAccount (FamilyID, AccountCode, NoticeState, CurGoldNum, RecGoldNum, PreGoldNum, Remark) values (?, ?, ?, ?, ?, ?, ?)
Hibernate: select user0_.UserID as UserID33_, user0_.FamilyID as FamilyID33_, user0_.UserCode as UserCode33_, user0_.MolbilePhone as MolbileP4_33_, user0_.Password as Password33_, user0_.MicroSignal as MicroSig6_33_, user0_.QQ as QQ33_, user0_.SinaTwitterNo as SinaTwit8_33_, user0_.QQTwitterNo as QQTwitte9_33_, user0_.Email as Email33_, user0_.RealName as RealName33_, user0_.NickName as NickName33_, user0_.Sex as Sex33_, user0_.OnlineGameID as OnlineG14_33_, user0_.RegisterTime as Registe15_33_, user0_.Remark as Remark33_, user0_.SinaCode as SinaCode33_, user0_.QQCode as QQCode33_, user0_.isHead as isHead33_, user0_.MachineCode as Machine20_33_, user0_.IsVisitor as IsVisitor33_, user0_.AvatarID as AvatarID33_, user0_.RoleID as RoleID33_ from Zhijia_Gfamily_T_User user0_ where user0_.MachineCode=? and user0_.IsVisitor=0
org.springframework.orm.hibernate3.HibernateSystemException: a different object with the same identifier value was already associated with the session: [com.zhijia.gfamily.po.player.User#13]; nested exception is org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [com.zhijia.gfamily.po.player.User#13]
at org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:661)

#12


注:com.zhijia.gfamily.po.player.User#13对应的是User中family字段
并且,打印出来的family=44,数据库中没有对应的数据

#13


事物是不是没有提交啊,妹子,,,

#14


再补充一段:
Caused by: org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [com.zhijia.gfamily.po.player.User#13]

#15


引用 13 楼 heaimnmn 的回复:
事物是不是没有提交啊,妹子,,,

不知道呢   我该怎么测试呢

补充:我朋友通过访问我的tomcat,并没有出现这种情况,

#16


你写个test去对数据库进行插入,试试,,,

#17


代码:
Family family=new Family();
System.out.println("family="+family.getId());
familyDao.save(family);
System.out.println("family="+family.getId());
User user=new User();
user.setFamily(family);
userDao.save(user);


刚new出来的family,System.out.println("family="+family.getId());肯定是空指针啊。你都没赋值。

#18


引用 17 楼 zhangxiaojie0321 的回复:
代码:
Family family=new Family();
System.out.println("family="+family.getId());
familyDao.save(family);
System.out.println("family="+family.getId());
User user=new User();
user.setFamily(family);
userDao.save(user);


刚new出来的family,System.out.println("family="+family.getId());肯定是空指针啊。你都没赋值。


第一个为null   第二个是44

#19


该回复于2014-03-07 17:12:06被管理员删除

#20


引用 16 楼 heaimnmn 的回复:
你写个test去对数据库进行插入,试试,,,

我换句话说吧,我电脑是服务器。有人可以通过访问我tomcat把数据添到数据库,有的人不能,我在本机也不能。不能的原因是,报了如上的错误。

#21


org.springframework.orm.hibernate3.HibernateSystemException: a different object with the same identifier value was already associated with the session: [com.zhijia.gfamily.po.player.User#13];
=====================================
作为ID 13的User对象已经存在了,这个你需要看下关于Hibernate的Entity管理状态
由于你的User是new出来的,保存后能打印ID,不知道你的Dao里是怎么写的...是数据库自增的吗,还是如何赋值的。
这种错误一般由于两个主键相同的对象,在不同事务中,且不同的管理状态下,hibernate无法区分你要保存的对象才会出现的,因为保存时,hibernate还会去检查内存的

#22


引用 20 楼 gt_1234567 的回复:
Quote: 引用 16 楼 heaimnmn 的回复:

你写个test去对数据库进行插入,试试,,,

我换句话说吧,我电脑是服务器。有人可以通过访问我tomcat把数据添到数据库,有的人不能,我在本机也不能。不能的原因是,报了如上的错误。
我知道啊,我说你在服务器端写个main函数调用试试,可以插入吗?

#23


为此推荐你看下这个文章
http://developer.51cto.com/art/200907/133235.htm

#24


有没有试过在save之后加flush()强制刷一下

#25


引用 22 楼 heaimnmn 的回复:
Quote: 引用 20 楼 gt_1234567 的回复:

Quote: 引用 16 楼 heaimnmn 的回复:

你写个test去对数据库进行插入,试试,,,

我换句话说吧,我电脑是服务器。有人可以通过访问我tomcat把数据添到数据库,有的人不能,我在本机也不能。不能的原因是,报了如上的错误。
我知道啊,我说你在服务器端写个main函数调用试试,可以插入吗?

久等了。刚试了。可以插入。

#26


那就debug插入那里的句子,然后从服务器点击看看呗,,,

#27


引用 25 楼 gt_1234567 的回复:
Quote: 引用 22 楼 heaimnmn 的回复:

Quote: 引用 20 楼 gt_1234567 的回复:

Quote: 引用 16 楼 heaimnmn 的回复:

你写个test去对数据库进行插入,试试,,,

我换句话说吧,我电脑是服务器。有人可以通过访问我tomcat把数据添到数据库,有的人不能,我在本机也不能。不能的原因是,报了如上的错误。
我知道啊,我说你在服务器端写个main函数调用试试,可以插入吗?

久等了。刚试了。可以插入。

补充一下,我main函数直接调Dao层,对象可以保存进去。但是我调service层的那个方法,就报错了。保存错误

#28


引用 26 楼 heaimnmn 的回复:
那就debug插入那里的句子,然后从服务器点击看看呗,,,

服务器没有打印出什么异常情况

#29



session.beginTransaction().commit();

有没有提交事务

#30


引用 29 楼 u010241813 的回复:

session.beginTransaction().commit();

有没有提交事务

这个不是框架自动管理了么?我没有写

#31


引用 22 楼 heaimnmn 的回复:
我知道啊,我说你在服务器端写个main函数调用试试,可以插入吗?

刚测试错了   都可以插入

#32


大神好     多

#33


引用 14 楼 gt_1234567 的回复:
再补充一段:
Caused by: org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [com.zhijia.gfamily.po.player.User#13]



这个错误很明显,相同的对象有冲突了,session中的user对象与familily.getId()关联的user对象冲突了,解决办法很简单,session 中有就直接用,没有在get就可以了;不解释

#34


根据你的报错信息目测的话 是因为你数据库中有一个id为13的user对象 而你新插入的这个对象id还是userid=13?

#35


目测Family和User对应的表中主键id为int类型,且自增,所以new新对象后,使用save()会自动给id赋值。Family和User之间不知道是“一对多”还是“多对多”的关系,暂且当“一对多”。

引用 11 楼 gt_1234567 的回复:
Quote: 引用 4 楼 l359122505 的回复:

提供的线索有点少啊,不好判断,妹子,多提供些代码 hibernate的保存问题(问题有点急,小女子在此先谢过大家了哈)


引用 9 楼 zhangxiaojie0321 的回复:
妹子 上代码吧。


代码太长了,我就简单概述哈
代码:
Family family=new Family();
System.out.println("family="+family.getId());
familyDao.save(family);
System.out.println("family="+family.getId());
User user=new User();
user.setFamily(family);
userDao.save(user);
报错:
family=:null
Hibernate: insert into Zhijia_Gfamily_T_UserFamily (FamilyCode, FamilyNickName, FamilyNum, RegisterTime, MicroSignal, QQ, SinaTwitterNo, QQTwitterNo, Email, MolbilePhone, Remark, UserID, AvatarUrl) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
family=:44
Hibernate: select familyacco0_.AccountID as AccountID27_, familyacco0_.FamilyID as FamilyID27_, familyacco0_.AccountCode as AccountC3_27_, familyacco0_.NoticeState as NoticeSt4_27_, familyacco0_.CurGoldNum as CurGoldNum27_, familyacco0_.RecGoldNum as RecGoldNum27_, familyacco0_.PreGoldNum as PreGoldNum27_, familyacco0_.Remark as Remark27_ from Zhijia_Gfamily_T_FamilyAccount familyacco0_ order by familyacco0_.AccountID desc limit ?
Hibernate: insert into Zhijia_Gfamily_T_FamilyAccount (FamilyID, AccountCode, NoticeState, CurGoldNum, RecGoldNum, PreGoldNum, Remark) values (?, ?, ?, ?, ?, ?, ?)
Hibernate: select user0_.UserID as UserID33_, user0_.FamilyID as FamilyID33_, user0_.UserCode as UserCode33_, user0_.MolbilePhone as MolbileP4_33_, user0_.Password as Password33_, user0_.MicroSignal as MicroSig6_33_, user0_.QQ as QQ33_, user0_.SinaTwitterNo as SinaTwit8_33_, user0_.QQTwitterNo as QQTwitte9_33_, user0_.Email as Email33_, user0_.RealName as RealName33_, user0_.NickName as NickName33_, user0_.Sex as Sex33_, user0_.OnlineGameID as OnlineG14_33_, user0_.RegisterTime as Registe15_33_, user0_.Remark as Remark33_, user0_.SinaCode as SinaCode33_, user0_.QQCode as QQCode33_, user0_.isHead as isHead33_, user0_.MachineCode as Machine20_33_, user0_.IsVisitor as IsVisitor33_, user0_.AvatarID as AvatarID33_, user0_.RoleID as RoleID33_ from Zhijia_Gfamily_T_User user0_ where user0_.MachineCode=? and user0_.IsVisitor=0
org.springframework.orm.hibernate3.HibernateSystemException: a different object with the same identifier value was already associated with the session: [com.zhijia.gfamily.po.player.User#13]; nested exception is org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [com.zhijia.gfamily.po.player.User#13]
at org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:661)


然后,看看hbm中是如何维护Family和User的关系,如果是由Family中维护,在Family的hbm中应该有“one-to-many”,如果是由User维护,在User的hbm中应该有“many-to-one”。看报错的样子像是前一种情况,而且在<set>中设置了cascade="save-update"属性。不知道你的示例代码是不是完整的,在 userDao.save(user);这句之前,有没有类似 family.getUsers().add(user);这样的语句。

#36


引用 1 楼 u011559804 的回复:
不给user  id能save?


 是我孤陋寡闻还是你误人子弟,save 要毛的id,update 才要吧。


楼主如果可以得到id,hibernate 的 看看flush 方法,将数据刷新

#37


引用 36 楼 qq573616 的回复:
Quote: 引用 1 楼 u011559804 的回复:

不给user  id能save?


 是我孤陋寡闻还是你误人子弟,save 要毛的id,update 才要吧。


楼主如果可以得到id,hibernate 的 看看flush 方法,将数据刷新

好吧,脑抽了。。。 hibernate的保存问题(问题有点急,小女子在此先谢过大家了哈)

#38


楼主,我的看法 是因为 你的family 与user 是一对一对应关系,你开始dao.save(family),family还在session 中,在保存user 也就把 family 再保存一次,大概是二级缓存的原因,2次取的family 是一样的。所以出错。在dao.save(family) 时,强制刷新flush方法

#39


引用 1 楼 u011559804 的回复:
不给user  id能save?
 不给id也行的!数据库配置主键id为自增的就行了!

#40


引用 37 楼 u011559804 的回复:
Quote: 引用 36 楼 qq573616 的回复:

Quote: 引用 1 楼 u011559804 的回复:

不给user  id能save?


 是我孤陋寡闻还是你误人子弟,save 要毛的id,update 才要吧。


楼主如果可以得到id,hibernate 的 看看flush 方法,将数据刷新

好吧,脑抽了。。。 hibernate的保存问题(问题有点急,小女子在此先谢过大家了哈)

学习了!

#41


在user.hbm文件中看看 对family的配置。 也可能是重复保存

#42


不要用的spring管理事务,spring管理事务本来存在导致数据库连接锁死的bug,用hibernate管理事务。

#43


引用 36 楼 qq573616 的回复:
Quote: 引用 1 楼 u011559804 的回复:

不给user  id能save?


 是我孤陋寡闻还是你误人子弟,save 要毛的id,update 才要吧。


楼主如果可以得到id,hibernate 的 看看flush 方法,将数据刷新


其实save的时候也可以定义id的,不过明显不如直接用序列好~不是说不能用~

#44


引用 43 楼 u010111184 的回复:
Quote: 引用 36 楼 qq573616 的回复:

Quote: 引用 1 楼 u011559804 的回复:

不给user  id能save?


 是我孤陋寡闻还是你误人子弟,save 要毛的id,update 才要吧。


楼主如果可以得到id,hibernate 的 看看flush 方法,将数据刷新


其实save的时候也可以定义id的,不过明显不如直接用序列好~不是说不能用~

是可以用啊,但是这哥们说的是没id 不能save

#45


这两天在维护另一个系统,所以还没来个急解决这个问题。

我觉得我的问题出在我程序save了,但是没有被save到数据库中。

引用 36 楼 qq573616 的回复:
 是我孤陋寡闻还是你误人子弟,save 要毛的id,update 才要吧。
楼主如果可以得到id,hibernate 的 看看flush 方法,将数据刷新


引用 42 楼 yzxgenius 的回复:
不要用的spring管理事务,spring管理事务本来存在导致数据库连接锁死的bug,用hibernate管理事务。

#46


把你的basedao发出来看看

#47


问题解决了,很弱智的错误。程序没有问题,访问传参错了。

错误:http://www.***/***? &name=abc
正确:http://www.***/***?name=abc

#48


最后,谢谢大家的帮助。

#1


不给user  id能save?

#2


你看下是不是事务没有提交这类的问题?

#3


我想说,别个连接我的电脑都可以save成功,但是我自己连接就不可以。。。

#4


提供的线索有点少啊,不好判断,妹子,多提供些代码 hibernate的保存问题(问题有点急,小女子在此先谢过大家了哈)

#5


引用 4 楼 l359122505 的回复:
提供的线索有点少啊,不好判断,妹子,多提供些代码 hibernate的保存问题(问题有点急,小女子在此先谢过大家了哈)

救星   您需要哪段代码?

#6


数据库连接配对了吗?

#7


自动提交设置了么?

#8


妹纸啊, 你把你的 IE 缓存和 tomcat 缓存删掉在试试, 或者重启 IDE

#9


妹子 上代码吧。

#10


引用 6 楼 yx3092187 的回复:
数据库连接配对了吗?


引用 7 楼 u010111184 的回复:
自动提交设置了么?


引用 8 楼 Ghost_520 的回复:
妹纸啊, 你把你的 IE 缓存和 tomcat 缓存删掉在试试, 或者重启 IDE


我是直接在后台写代码测试的,就是模拟浏览器访问的我程序。
然后,我朋友在他电脑*问我的tomcat,是可以save成功的。
然后,我本机就比较神奇了。各种无解啊~~

#11


引用 4 楼 l359122505 的回复:
提供的线索有点少啊,不好判断,妹子,多提供些代码 hibernate的保存问题(问题有点急,小女子在此先谢过大家了哈)


引用 9 楼 zhangxiaojie0321 的回复:
妹子 上代码吧。


代码太长了,我就简单概述哈
代码:
Family family=new Family();
System.out.println("family="+family.getId());
familyDao.save(family);
System.out.println("family="+family.getId());
User user=new User();
user.setFamily(family);
userDao.save(user);
报错:
family=:null
Hibernate: insert into Zhijia_Gfamily_T_UserFamily (FamilyCode, FamilyNickName, FamilyNum, RegisterTime, MicroSignal, QQ, SinaTwitterNo, QQTwitterNo, Email, MolbilePhone, Remark, UserID, AvatarUrl) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
family=:44
Hibernate: select familyacco0_.AccountID as AccountID27_, familyacco0_.FamilyID as FamilyID27_, familyacco0_.AccountCode as AccountC3_27_, familyacco0_.NoticeState as NoticeSt4_27_, familyacco0_.CurGoldNum as CurGoldNum27_, familyacco0_.RecGoldNum as RecGoldNum27_, familyacco0_.PreGoldNum as PreGoldNum27_, familyacco0_.Remark as Remark27_ from Zhijia_Gfamily_T_FamilyAccount familyacco0_ order by familyacco0_.AccountID desc limit ?
Hibernate: insert into Zhijia_Gfamily_T_FamilyAccount (FamilyID, AccountCode, NoticeState, CurGoldNum, RecGoldNum, PreGoldNum, Remark) values (?, ?, ?, ?, ?, ?, ?)
Hibernate: select user0_.UserID as UserID33_, user0_.FamilyID as FamilyID33_, user0_.UserCode as UserCode33_, user0_.MolbilePhone as MolbileP4_33_, user0_.Password as Password33_, user0_.MicroSignal as MicroSig6_33_, user0_.QQ as QQ33_, user0_.SinaTwitterNo as SinaTwit8_33_, user0_.QQTwitterNo as QQTwitte9_33_, user0_.Email as Email33_, user0_.RealName as RealName33_, user0_.NickName as NickName33_, user0_.Sex as Sex33_, user0_.OnlineGameID as OnlineG14_33_, user0_.RegisterTime as Registe15_33_, user0_.Remark as Remark33_, user0_.SinaCode as SinaCode33_, user0_.QQCode as QQCode33_, user0_.isHead as isHead33_, user0_.MachineCode as Machine20_33_, user0_.IsVisitor as IsVisitor33_, user0_.AvatarID as AvatarID33_, user0_.RoleID as RoleID33_ from Zhijia_Gfamily_T_User user0_ where user0_.MachineCode=? and user0_.IsVisitor=0
org.springframework.orm.hibernate3.HibernateSystemException: a different object with the same identifier value was already associated with the session: [com.zhijia.gfamily.po.player.User#13]; nested exception is org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [com.zhijia.gfamily.po.player.User#13]
at org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:661)

#12


注:com.zhijia.gfamily.po.player.User#13对应的是User中family字段
并且,打印出来的family=44,数据库中没有对应的数据

#13


事物是不是没有提交啊,妹子,,,

#14


再补充一段:
Caused by: org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [com.zhijia.gfamily.po.player.User#13]

#15


引用 13 楼 heaimnmn 的回复:
事物是不是没有提交啊,妹子,,,

不知道呢   我该怎么测试呢

补充:我朋友通过访问我的tomcat,并没有出现这种情况,

#16


你写个test去对数据库进行插入,试试,,,

#17


代码:
Family family=new Family();
System.out.println("family="+family.getId());
familyDao.save(family);
System.out.println("family="+family.getId());
User user=new User();
user.setFamily(family);
userDao.save(user);


刚new出来的family,System.out.println("family="+family.getId());肯定是空指针啊。你都没赋值。

#18


引用 17 楼 zhangxiaojie0321 的回复:
代码:
Family family=new Family();
System.out.println("family="+family.getId());
familyDao.save(family);
System.out.println("family="+family.getId());
User user=new User();
user.setFamily(family);
userDao.save(user);


刚new出来的family,System.out.println("family="+family.getId());肯定是空指针啊。你都没赋值。


第一个为null   第二个是44

#19


该回复于2014-03-07 17:12:06被管理员删除

#20


引用 16 楼 heaimnmn 的回复:
你写个test去对数据库进行插入,试试,,,

我换句话说吧,我电脑是服务器。有人可以通过访问我tomcat把数据添到数据库,有的人不能,我在本机也不能。不能的原因是,报了如上的错误。

#21


org.springframework.orm.hibernate3.HibernateSystemException: a different object with the same identifier value was already associated with the session: [com.zhijia.gfamily.po.player.User#13];
=====================================
作为ID 13的User对象已经存在了,这个你需要看下关于Hibernate的Entity管理状态
由于你的User是new出来的,保存后能打印ID,不知道你的Dao里是怎么写的...是数据库自增的吗,还是如何赋值的。
这种错误一般由于两个主键相同的对象,在不同事务中,且不同的管理状态下,hibernate无法区分你要保存的对象才会出现的,因为保存时,hibernate还会去检查内存的

#22


引用 20 楼 gt_1234567 的回复:
Quote: 引用 16 楼 heaimnmn 的回复:

你写个test去对数据库进行插入,试试,,,

我换句话说吧,我电脑是服务器。有人可以通过访问我tomcat把数据添到数据库,有的人不能,我在本机也不能。不能的原因是,报了如上的错误。
我知道啊,我说你在服务器端写个main函数调用试试,可以插入吗?

#23


为此推荐你看下这个文章
http://developer.51cto.com/art/200907/133235.htm

#24


有没有试过在save之后加flush()强制刷一下

#25


引用 22 楼 heaimnmn 的回复:
Quote: 引用 20 楼 gt_1234567 的回复:

Quote: 引用 16 楼 heaimnmn 的回复:

你写个test去对数据库进行插入,试试,,,

我换句话说吧,我电脑是服务器。有人可以通过访问我tomcat把数据添到数据库,有的人不能,我在本机也不能。不能的原因是,报了如上的错误。
我知道啊,我说你在服务器端写个main函数调用试试,可以插入吗?

久等了。刚试了。可以插入。

#26


那就debug插入那里的句子,然后从服务器点击看看呗,,,

#27


引用 25 楼 gt_1234567 的回复:
Quote: 引用 22 楼 heaimnmn 的回复:

Quote: 引用 20 楼 gt_1234567 的回复:

Quote: 引用 16 楼 heaimnmn 的回复:

你写个test去对数据库进行插入,试试,,,

我换句话说吧,我电脑是服务器。有人可以通过访问我tomcat把数据添到数据库,有的人不能,我在本机也不能。不能的原因是,报了如上的错误。
我知道啊,我说你在服务器端写个main函数调用试试,可以插入吗?

久等了。刚试了。可以插入。

补充一下,我main函数直接调Dao层,对象可以保存进去。但是我调service层的那个方法,就报错了。保存错误

#28


引用 26 楼 heaimnmn 的回复:
那就debug插入那里的句子,然后从服务器点击看看呗,,,

服务器没有打印出什么异常情况

#29



session.beginTransaction().commit();

有没有提交事务

#30


引用 29 楼 u010241813 的回复:

session.beginTransaction().commit();

有没有提交事务

这个不是框架自动管理了么?我没有写

#31


引用 22 楼 heaimnmn 的回复:
我知道啊,我说你在服务器端写个main函数调用试试,可以插入吗?

刚测试错了   都可以插入

#32


大神好     多

#33


引用 14 楼 gt_1234567 的回复:
再补充一段:
Caused by: org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [com.zhijia.gfamily.po.player.User#13]



这个错误很明显,相同的对象有冲突了,session中的user对象与familily.getId()关联的user对象冲突了,解决办法很简单,session 中有就直接用,没有在get就可以了;不解释

#34


根据你的报错信息目测的话 是因为你数据库中有一个id为13的user对象 而你新插入的这个对象id还是userid=13?

#35


目测Family和User对应的表中主键id为int类型,且自增,所以new新对象后,使用save()会自动给id赋值。Family和User之间不知道是“一对多”还是“多对多”的关系,暂且当“一对多”。

引用 11 楼 gt_1234567 的回复:
Quote: 引用 4 楼 l359122505 的回复:

提供的线索有点少啊,不好判断,妹子,多提供些代码 hibernate的保存问题(问题有点急,小女子在此先谢过大家了哈)


引用 9 楼 zhangxiaojie0321 的回复:
妹子 上代码吧。


代码太长了,我就简单概述哈
代码:
Family family=new Family();
System.out.println("family="+family.getId());
familyDao.save(family);
System.out.println("family="+family.getId());
User user=new User();
user.setFamily(family);
userDao.save(user);
报错:
family=:null
Hibernate: insert into Zhijia_Gfamily_T_UserFamily (FamilyCode, FamilyNickName, FamilyNum, RegisterTime, MicroSignal, QQ, SinaTwitterNo, QQTwitterNo, Email, MolbilePhone, Remark, UserID, AvatarUrl) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
family=:44
Hibernate: select familyacco0_.AccountID as AccountID27_, familyacco0_.FamilyID as FamilyID27_, familyacco0_.AccountCode as AccountC3_27_, familyacco0_.NoticeState as NoticeSt4_27_, familyacco0_.CurGoldNum as CurGoldNum27_, familyacco0_.RecGoldNum as RecGoldNum27_, familyacco0_.PreGoldNum as PreGoldNum27_, familyacco0_.Remark as Remark27_ from Zhijia_Gfamily_T_FamilyAccount familyacco0_ order by familyacco0_.AccountID desc limit ?
Hibernate: insert into Zhijia_Gfamily_T_FamilyAccount (FamilyID, AccountCode, NoticeState, CurGoldNum, RecGoldNum, PreGoldNum, Remark) values (?, ?, ?, ?, ?, ?, ?)
Hibernate: select user0_.UserID as UserID33_, user0_.FamilyID as FamilyID33_, user0_.UserCode as UserCode33_, user0_.MolbilePhone as MolbileP4_33_, user0_.Password as Password33_, user0_.MicroSignal as MicroSig6_33_, user0_.QQ as QQ33_, user0_.SinaTwitterNo as SinaTwit8_33_, user0_.QQTwitterNo as QQTwitte9_33_, user0_.Email as Email33_, user0_.RealName as RealName33_, user0_.NickName as NickName33_, user0_.Sex as Sex33_, user0_.OnlineGameID as OnlineG14_33_, user0_.RegisterTime as Registe15_33_, user0_.Remark as Remark33_, user0_.SinaCode as SinaCode33_, user0_.QQCode as QQCode33_, user0_.isHead as isHead33_, user0_.MachineCode as Machine20_33_, user0_.IsVisitor as IsVisitor33_, user0_.AvatarID as AvatarID33_, user0_.RoleID as RoleID33_ from Zhijia_Gfamily_T_User user0_ where user0_.MachineCode=? and user0_.IsVisitor=0
org.springframework.orm.hibernate3.HibernateSystemException: a different object with the same identifier value was already associated with the session: [com.zhijia.gfamily.po.player.User#13]; nested exception is org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [com.zhijia.gfamily.po.player.User#13]
at org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:661)


然后,看看hbm中是如何维护Family和User的关系,如果是由Family中维护,在Family的hbm中应该有“one-to-many”,如果是由User维护,在User的hbm中应该有“many-to-one”。看报错的样子像是前一种情况,而且在<set>中设置了cascade="save-update"属性。不知道你的示例代码是不是完整的,在 userDao.save(user);这句之前,有没有类似 family.getUsers().add(user);这样的语句。

#36


引用 1 楼 u011559804 的回复:
不给user  id能save?


 是我孤陋寡闻还是你误人子弟,save 要毛的id,update 才要吧。


楼主如果可以得到id,hibernate 的 看看flush 方法,将数据刷新

#37


引用 36 楼 qq573616 的回复:
Quote: 引用 1 楼 u011559804 的回复:

不给user  id能save?


 是我孤陋寡闻还是你误人子弟,save 要毛的id,update 才要吧。


楼主如果可以得到id,hibernate 的 看看flush 方法,将数据刷新

好吧,脑抽了。。。 hibernate的保存问题(问题有点急,小女子在此先谢过大家了哈)

#38


楼主,我的看法 是因为 你的family 与user 是一对一对应关系,你开始dao.save(family),family还在session 中,在保存user 也就把 family 再保存一次,大概是二级缓存的原因,2次取的family 是一样的。所以出错。在dao.save(family) 时,强制刷新flush方法

#39


引用 1 楼 u011559804 的回复:
不给user  id能save?
 不给id也行的!数据库配置主键id为自增的就行了!

#40


引用 37 楼 u011559804 的回复:
Quote: 引用 36 楼 qq573616 的回复:

Quote: 引用 1 楼 u011559804 的回复:

不给user  id能save?


 是我孤陋寡闻还是你误人子弟,save 要毛的id,update 才要吧。


楼主如果可以得到id,hibernate 的 看看flush 方法,将数据刷新

好吧,脑抽了。。。 hibernate的保存问题(问题有点急,小女子在此先谢过大家了哈)

学习了!

#41


在user.hbm文件中看看 对family的配置。 也可能是重复保存

#42


不要用的spring管理事务,spring管理事务本来存在导致数据库连接锁死的bug,用hibernate管理事务。

#43


引用 36 楼 qq573616 的回复:
Quote: 引用 1 楼 u011559804 的回复:

不给user  id能save?


 是我孤陋寡闻还是你误人子弟,save 要毛的id,update 才要吧。


楼主如果可以得到id,hibernate 的 看看flush 方法,将数据刷新


其实save的时候也可以定义id的,不过明显不如直接用序列好~不是说不能用~

#44


引用 43 楼 u010111184 的回复:
Quote: 引用 36 楼 qq573616 的回复:

Quote: 引用 1 楼 u011559804 的回复:

不给user  id能save?


 是我孤陋寡闻还是你误人子弟,save 要毛的id,update 才要吧。


楼主如果可以得到id,hibernate 的 看看flush 方法,将数据刷新


其实save的时候也可以定义id的,不过明显不如直接用序列好~不是说不能用~

是可以用啊,但是这哥们说的是没id 不能save

#45


这两天在维护另一个系统,所以还没来个急解决这个问题。

我觉得我的问题出在我程序save了,但是没有被save到数据库中。

引用 36 楼 qq573616 的回复:
 是我孤陋寡闻还是你误人子弟,save 要毛的id,update 才要吧。
楼主如果可以得到id,hibernate 的 看看flush 方法,将数据刷新


引用 42 楼 yzxgenius 的回复:
不要用的spring管理事务,spring管理事务本来存在导致数据库连接锁死的bug,用hibernate管理事务。

#46


把你的basedao发出来看看

#47


问题解决了,很弱智的错误。程序没有问题,访问传参错了。

错误:http://www.***/***? &name=abc
正确:http://www.***/***?name=abc

#48


最后,谢谢大家的帮助。