用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;
}
----------------解决方案--------------------------------------------------------