Hibernate-3.6.0的save问题 求解

HosiHui 2010-12-08 06:07:33
数据库表temp,只有2个字段:id 类型为Integer 为主键,但不是自动增长列;name 类型为varchar

实体类 Temp,以及对应的映射文件 Temp.hbm.xml

我用的是Spring-3.0.5 和 Hibernate-3.6.0

操作类如下:
public class TempDao extends HibernateDaoSupport {

public void doAdd(Temp t){
System.out.println(t.getId()+" ===== "+t.getName());
getHibernateTemplate().save(t);
}
}

如上代码,用Hibernate的save方法。但是报错:

1 ===== aaa
Hibernate: insert into PUBLIC.TEMP (ID, NAME) values (null, ?)
org.springframework.dao.DataIntegrityViolationException: could not insert: ...SQL [insert into PUBLIC.TEMP (ID, NAME) values (null, ?)]; constraint [null];

其意是ID列不能插入null值。但是 t.getId() 明显有值啊,并且打印出来为1。有高手解答么?多谢!

另外用update(t)方法更新数据库中的数据,一切正常的。
如果把字段id改为自动增长,插入数据时,只setName();然后save(t),也正常。
...全文
44 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
HosiHui 2010-12-10
  • 打赏
  • 举报
回复
没人回...
不过我已经找出答案了~ 映射文件的配置不对,虽然是主键,但不是自动增长的,我配置:
<generator class="identity"></generator>

改为:
<generator class="assigned"></generator>
就完全OK了

identity
适用于代理主键。由底层数据库生成标识符。

assigned
适用于自然主键。由Java应用程序负责生成标识符。

23,402

社区成员

发帖
与我相关
我的任务
社区描述
Java 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧