hibernate,一对多,保存更新问题

XEZBZ 2017-11-02 08:34:30
最近在做一个有关网页聊天的项目,需要保存聊天记录到数据库中,用到了两张表,一张是用户表User,一张是聊天记录表chatHistory;User结构大概如下:
id userName(用户名) password(密码)

User对应的bean如下:
public class User{
private Long id;
private String userName;
private String passWord;
get\set方法.....
}


chatHistory结构大概如下:
id senderId(发送用户Id) reciverId(接受用户Id) msg(信息内容)

chatHistory对应的bean如下:
public class chatHistory{
private Long id;
private User sender;
private User reciver;
private String msg;
get\set方法....
}
项目使用了hibernate,spring和struts;
在保存聊天记录时,我直接这样:
User sender = new User();
sender.setId(2);
User reciver = new User();
reciver.setId(3);
chatHistory ch = new chatHistory();
ch.setSender(sender);
ch.setReciver(reciver);
ch.setMsg("hello world!");

new HibernateTemplate(sessionFactory).save(ch);

结果是id为2和3的用户的userName和password字段都被更新为Null了,请问这该怎么解决,菜鸟一枚,还请各位大神赐教,
...全文
384 5 打赏 收藏 举报
写回复
5 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
十歌 2018-09-13
User sender = new User();
sender.setId(2);
User reciver = new User();
reciver.setId(3);

你这样就新NEW了user对象 重新设置了user里面的内容 你又只set了id 账号密码当然为NULL
你不能NEW 你要先获得相应user对象 如:User user = session.get(user.class,id) 然后再用user.setXXX进行修改
  • 打赏
  • 举报
回复
wnho02 2017-11-06
<many-to-one name="sender" column="SenderId" cascade="all" /> 
你把cascade属性改一下试试, 有可能更新的时候级联更新了User,属性改为None试试
  • 打赏
  • 举报
回复
XEZBZ 2017-11-04
我不是用注解,是用xml配置的 user配置如下: <class name="User" table="User"> <id name="id" column="id"> <generator class="native"/> </id> <property name="userName"/> <property name="passWord"/> </class> chatHistory配置如下: <class name="chatHistory" table="chatHistory"> <id name="id" column="id"> <generator class="native" /> </id> <property name="msg" /> <many-to-one name="sender" column="SenderId" cascade="all" /> <many-to-one name="reciver" column="ReciverId" cascade="all" /> </class>
  • 打赏
  • 举报
回复
pheonix0992 2017-11-03
user的Id是怎么设置的,是自增的还是手动设置的,你把数据库的注解发出来看下。
  • 打赏
  • 举报
回复
XEZBZ 2017-11-02
请问如何才能做到保存信息时不更新user表
  • 打赏
  • 举报
回复
发帖
Web 开发

8.0w+

社区成员

Java Web 开发
社区管理员
  • Web 开发社区
加入社区
帖子事件
创建了帖子
2017-11-02 08:34
社区公告
暂无公告