Hibernate获取序列

现在有这样一个需求,每个员工都有个ID,还有一个工号,ID是Oracle的序列,每次自动加1,而工号是个字符串,总共长8位,前面都是0,后面是员工ID,比如员工ID为88,则其工号为00000088,
首先,员工的工号总是8位,前面都是0,为了解决这个问题,需要在其工号的set方法中添加逻辑,如果工号长度不够8为,前面加0,这个比较好解决:

public void setJobNumber(String jobNumber) {
/*
* 由于需要获取长度,需要判断入参是否为空,防止空指针异常
*/
if(StringUtil.isNotEmpty(jobNumber)&&jobNumber.length()<Constant.JOB_NUMBER_LENGTH){
while(jobNumber.length()<Constant.JOB_NUMBER_LENGTH){
jobNumber="0"+jobNumber;
}
}
this.jobNumber = jobNumber;
}

下面就是解决工号获取序列的问题,先给出我的解决方案

Session session = getSession();
// session.merge(arg0)
Transaction tr = session.beginTransaction();
try {
session.save(user);
//员工工号绝对值取数据库中序列值
user.setJobNumber(user.getUserID().toString());
tr.commit();

} catch (HibernateException e) {
tr.rollback();
log.debug("regist failed,the reason is :" + e.getMessage());
return false;
} finally {
session.close();
}

之所以在session.save(user)再调用user.setJobNumber方法,是因为在save之后,user已经是persistent,此时的user已经和数据库中的一条记录管理,或者说,现在Hibernate已经将数据库中的序列值set到了UserID中了,此时再执行user.setJobNumber(user.getUserID().toString());完全可以获取到用户ID,再次之后,Hibernate也会将该变化映射到数据库中user对应的记录中,在提交之后,即将user变为detached之后,Hibernate会将JobNumber的变化映射到数据库上,即做更新操作,从Hibernate打印的SQL也可以看出实际执行过程:
Hibernate: select USER_ID.nextval from dual
Hibernate: insert into t_user (address, age, college, department, education, email, headPic, height, identity, jobNumber, married, name, nickName, password, phoneNo, role, sex, status, title, userext, weight, userID) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
Hibernate: update t_user set jobNumber=? where userID=?

以上是本人的解决方法,不知道是否合理和妥当,或者有没有其他更好的解决方案呢??
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值