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

解决方案 »

  1.   

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

  2.   


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

  3.   

    代码太长了,我就简单概述哈
    代码:
    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, Re, 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_.Re as Re27_ 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, Re) 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_.Re as Re33_, 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)
      

  4.   

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

  5.   

    再补充一段:
    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]
      

  6.   

    不知道呢   我该怎么测试呢补充:我朋友通过访问我的tomcat,并没有出现这种情况,
      

  7.   

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

  8.   

    代码:
    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());肯定是空指针啊。你都没赋值。
      

  9.   


    第一个为null   第二个是44
      

  10.   

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

  11.   

    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还会去检查内存的
      

  12.   

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

  13.   

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

  14.   

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

  15.   

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

  16.   

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

  17.   

    我换句话说吧,我电脑是服务器。有人可以通过访问我tomcat把数据添到数据库,有的人不能,我在本机也不能。不能的原因是,报了如上的错误。我知道啊,我说你在服务器端写个main函数调用试试,可以插入吗?
    久等了。刚试了。可以插入。
    补充一下,我main函数直接调Dao层,对象可以保存进去。但是我调service层的那个方法,就报错了。保存错误
      

  18.   


    session.beginTransaction().commit();有没有提交事务
      

  19.   

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

  20.   

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

  21.   

    目测Family和User对应的表中主键id为int类型,且自增,所以new新对象后,使用save()会自动给id赋值。Family和User之间不知道是“一对多”还是“多对多”的关系,暂且当“一对多”。代码太长了,我就简单概述哈
    代码:
    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, Re, 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_.Re as Re27_ 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, Re) 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_.Re as Re33_, 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);这样的语句。
      

  22.   


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

  23.   


     是我孤陋寡闻还是你误人子弟,save 要毛的id,update 才要吧。
    楼主如果可以得到id,hibernate 的 看看flush 方法,将数据刷新
    好吧,脑抽了
      

  24.   

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

  25.   

     不给id也行的!数据库配置主键id为自增的就行了!
      

  26.   


     是我孤陋寡闻还是你误人子弟,save 要毛的id,update 才要吧。
    楼主如果可以得到id,hibernate 的 看看flush 方法,将数据刷新
    好吧,脑抽了
    学习了!
      

  27.   

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

  28.   

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

  29.   


     是我孤陋寡闻还是你误人子弟,save 要毛的id,update 才要吧。
    楼主如果可以得到id,hibernate 的 看看flush 方法,将数据刷新其实save的时候也可以定义id的,不过明显不如直接用序列好~不是说不能用~
      

  30.   


     是我孤陋寡闻还是你误人子弟,save 要毛的id,update 才要吧。
    楼主如果可以得到id,hibernate 的 看看flush 方法,将数据刷新其实save的时候也可以定义id的,不过明显不如直接用序列好~不是说不能用~
    是可以用啊,但是这哥们说的是没id 不能save
      

  31.   

    这两天在维护另一个系统,所以还没来个急解决这个问题。我觉得我的问题出在我程序save了,但是没有被save到数据库中。
      

  32.   

    问题解决了,很弱智的错误。程序没有问题,访问传参错了。错误:http://www.***/***?&name=abc
    正确:http://www.***/***?name=abc