使用hibernate生成id的策略后,save保存对象的时候如何取得对象的id值[。
在实体中加入的hibernate的注释
|
1
2
3
4
5
6
7
8
9
10
|
@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中写保存方法的时候
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
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值?
hibernate保存完一个对象后,它会把id赋个这个对象;
session.save(obj);
obj.getId(); //此时ID值对应最新记录编号
搞清hibernate对象的三种状态,对你非常有好处。
hibernate在保存完一个对象后,它会把id赋个这个对象;
session.save(obj);
obj.getId();
这样就可以获取到id的值
hibernate对象的三种状态:瞬时态 (Transient)、持久态(Persistent)、脱管态(Detached)
高清这三个,上面的问题你就不会到这来问了。
记得给分啊,谢谢