使用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)
高清这三个,上面的问题你就不会到这来问了。
记得给分啊,谢谢