使用hibernate生成id的策略后,save保存对象的时候如何取得对象的id值

wangxinyi1986 2011-07-20 07:31:38
在实体中加入的hibernate的注释

@Id
@GeneratedValue( strategy = GenerationType.TABLE, generator="re_database_gen")
@TableGenerator(
name="re_database_gen",
table="id_generator",
pkColumnName = "G_KEY",
pkColumnValue="re_database_id",
valueColumnName = "G_VALUE",
allocationSize=1
)

这种

我save完成之后,id_generator这张数据库表中的id值也已经自增了1
但是我在action中写保存方法的时候

public ActionForward jsonSave(ActionMapping mapping,
ActionForm form, HttpServletRequest request,
HttpServletResponse response){
ReDataBase reDataBase = new ReDataBase();

Long time = Long.decode(Tools.formatDate(new Date(), Constants.DB_TIME_FORMAT));
if(reDataBase.getId() == null){
reDataBase.setCreator(oprator);
reDataBase.setCreatetime(time);
}
reDataBase.setModifier(oprator);
reDataBase.setModifytime(time);

this.formToObject(form, reDataBase);

this.reDataBaseDao.save(reDataBase);//在此处报错

this.successJsonMessage(response);
return null;
}



2011-07-20 19:19:23,640 ERROR [http-8080-3][org.hibernate.util.JDBCExceptionReporter:72] - Column 'id' cannot be null
2011-07-20 19:19:23,656 ERROR [http-8080-3][org.hibernate.event.def.AbstractFlushingEventListener:301] - Could not synchronize database state with session
org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update

这个错误

不知道如何取得id生成表的的id值?
...全文
2042 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangxinyi1986 2011-08-08
  • 打赏
  • 举报
回复
确实是 我放错位置了 5
wangxinyi1986 2011-08-08
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 tjcyjd 的回复:]

hibernate在保存完一个对象后,它会把id赋个这个对象;
session.save(obj);
obj.getId();
这样就可以获取到id的值
hibernate对象的三种状态:瞬时态 (Transient)、持久态(Persistent)、脱管态(Detached)
高清这三个,上面的问题你就不会到这来问了。
记得给分啊,谢谢
[/Quote]

不好意思啊 不是你说的这个问题 呵呵 我的那个getid的标注策略放错地方了

单独看你的回复 是正确的 呵呵
Java高知社区 2011-07-21
  • 打赏
  • 举报
回复
hibernate在保存完一个对象后,它会把id赋个这个对象;
session.save(obj);
obj.getId();
这样就可以获取到id的值
hibernate对象的三种状态:瞬时态 (Transient)、持久态(Persistent)、脱管态(Detached)
高清这三个,上面的问题你就不会到这来问了。

记得给分啊,谢谢
  • 打赏
  • 举报
回复
你的主键增长策略没配置好,
h54068650 2011-07-21
  • 打赏
  • 举报
回复
<generator class="sequence">
<param name="sequence">sq_mid</param>
</generator>
傻傻的傻傻傻 2011-07-21
  • 打赏
  • 举报
回复
估计你主键生成策略没加上,id需要手动输入。
zl3450341 2011-07-21
  • 打赏
  • 举报
回复
hibernate保存完一个对象后,它会把id赋个这个对象;
session.save(obj);
obj.getId(); //此时ID值对应最新记录编号

搞清hibernate对象的三种状态,对你非常有好处。
shilyj7 2011-07-21
  • 打赏
  • 举报
回复
呵呵,接分。
wangxinyi1986 2011-07-21
  • 打赏
  • 举报
回复
汗…… 我注释加错位置了

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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