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



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

在实体中加入的hibernate的注释

Java code

?

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中写保存方法的时候

Java code

?

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