运行的时候出错是这样的
object references an unsaved transient instance - save the transient instance before flushing: com.luger.model.User我描述一下产生这个问题的原因
我做的是一个信息发布系统  Model 有 User.java Info.java  分别是注册的用户和发布的信息  其中Info.java中有 User user;  相当于数据库Info表中的外键指的是谁发的信息 即User的id  
然后问题来了  当用户登录后我把User的id和name存到session中  然后用户发布信息的时候有一个<input type="hidden" name="info.user.id" value="#session.userId"/>相当于把Info.java中的User user传过去  然后提交的时候就出现那个问题了 其中Action中只有save(info)如果吧Info.java中的user设置成@ManyToOne(cascade={CascadeType.All}) @JoinColumn(name = "userId")  那么这样保存的话会在数据库中新生成一条记录  如果改成别的那么就会出现如上的错误
 请问怎么解决呢

解决方案 »

  1.   

    假设你要保存info对象
    先这样
    User user = xxDao.get(User.class, info.getUser.getId) 重新取得user对象
    info.setUser(user)
    这样再保存infor就OK了。注意 hibernate是对象管理,不是数据管理,它不会认为你的infor.getUser里面有个id,就认为user是对象了,必须重新取才行。
      

  2.   

     解决的办法就是按上面说的 info.setUser(user)  还有什么问题可以call me
      

  3.   

    应该是User 没有获得到值,id 为null,需要重新获得User值,在保存数据库时就不会变成transient状态咯。
    必要时设置级联加载。
      

  4.   

    session中的数据有时候并不是数据库里面的数据,从数据库中取出User user = xxDao.get(User.class, info.getUser.getId) ,才是正确的
      

  5.   

    这个意思是说你要保存的这个对象关联的外键没有保存进去!
    这种错误很常见了。
    SSH基本N多着错误~