Hibernate的session.saveOrUpdate()保存失败.杂办?

[复制链接]
查看11 | 回复4 | 2007-1-24 14:35:02 | 显示全部楼层 |阅读模式
用ChinatCityDAO.java 继承 AbstractADO.java执行一个数据的插入操作。
1.第一次执行insert操作成功.
控制台输出如下:
ID : null City : shanghai
Hibernate: insert into china_city (CityName, CityId) values (?, ?)

mysql> select * from china_city;
+----------------------------------+----------+
| CityId
| CityName |
+----------------------------------+----------+
| 402881e70f8a5bc9010f8a5bcf720001 | shanghai |
+----------------------------------+----------+

2. 继续执行insert后失败。发现Hibernate执行了一个Update操作,而数据包含了上一个动作的ID。不明白为什么。
打印的HQL语句为
ID : 402881e70f8a5bc9010f8a5bcf720001 City : shanghai2
Hibernate: update china_city set CityName=? where CityId=?
AbstractADO.java类
protected void saveOrUpdate(Object obj) {
try {

startOperation();

session.saveOrUpdate(obj);
//session.flush();

tx.commit();
} catch (HibernateException e) {

handleException(e);
} finally {

HibernateFactory.close(session);
}
}

ChinatCityDAO.java
public boolean insert(ChinaCity city){
System.out.println("ID : " +city.getCityId() + " City : "+city.getCityName());
saveOrUpdate(city);
return true;
}
回复

使用道具 举报

千问 | 2007-1-24 14:35:02 | 显示全部楼层
city的id设为空试试
回复

使用道具 举报

千问 | 2007-1-24 14:35:02 | 显示全部楼层
如果id不为空,它可能要去做一个update动作的
回复

使用道具 举报

千问 | 2007-1-24 14:35:02 | 显示全部楼层
设置为空后,运行正常
回复

使用道具 举报

千问 | 2007-1-24 14:35:02 | 显示全部楼层
最初由 limo19801226 发布
[B]设置为空后,运行正常 [/B]


hibernate的原理是这样的啦!!!
如果你设置id不为空,他认为你是去更新数据。
如果设为空,那么他认为你是插入数据。
所以就是为什么叫saveOrUpdate嘛!!!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行