现在有这样一个需求,每个员工都有个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=?
以上是本人的解决方法,不知道是否合理和妥当,或者有没有其他更好的解决方案呢??
分享到:
相关推荐
标识字段和序列(Identity columns and Sequences) 5.1.4.5. 程序分配的标识符(Assigned Identifiers) 5.1.5. composite-id 联合ID 5.1.6. 识别器(discriminator) 5.1.7. 版本(version)(可选)...
rar中包含整个项目的源码和数据库生成脚本,采用jax-ws发布Web Service服务,支持java客户端和.Net客户端调用,数据库采用oracle10g,里面有创建数据库脚本文件createTable_Oracle10g.sql,由于Hibernate映射表中会...
1.3.3 使用序列化 1.3.4 面向对象的数据库系统 1.3.5 其他选项 1.4 ORM 1.4.1 什么是ORM 1.4.2 一般的ORM问题 1.4.3 为什么选择ORM 1.4.4 Hibernate、EJB 3和JPA简介 1.5 小结 ...
* 7.sequence 调用谨慎数据库的序列来生成主键,要设定序列名,不然hibernate无法找到。 * 例:@GeneratedValue(generator = "paymentableGenerator") * @GenericGenerator(name = "paymentableGenerator", ...
6.1.2 从序列(Sequence)中获取自动增长的标识符 6.2 Java语言按内存地址区分不同的对象 6.3 Hibernate用对象标识符(OID)来区分对象 6.4 Hibernate的内置标识符生成器的用法 6.4.1 increment标识符生成器 ...
标识字段和序列(Identity columns and Sequences) 5.1.4.5. 程序分配的标识符(Assigned Identifiers) 5.1.4.6. 触发器实现的主键生成器(Primary keys assigned by triggers) 5.1.5. composite-id 5.1.6. 鉴别...
标识字段和序列(Identity columns and Sequences) 5.1.4.5. 程序分配的标识符(Assigned Identifiers) 5.1.4.6. 触发器实现的主键生成器(Primary keys assigned by triggers) 5.1.5. composite-id 5.1.6. 鉴别...
6.1.2 从序列(Sequence)中获取自动增长的标识符 124 6.2 Java语言按内存地址区分不同的对象 125 6.3 Hibernate用对象标识符(OID)来区分对象 126 6.4 Hibernate的内置标识符生成器的用法 128 6.4.1 increment...
标识字段和序列(Identity columns and Sequences) 6.1.4.5. 程序分配的标识符(Assigned Identifiers) 6.1.4.6. 触发器实现的主键生成器(Primary keys assigned by triggers) 6.1.5. composite-id 6.1.6. ...
标识字段和序列(Identity columns and Sequences) 5.1.4.5. 程序分配的标识符(Assigned Identifiers) 5.1.4.6. 触发器实现的主键生成器(Primary keys assigned by triggers) 5.1.5. composite-id 5.1.6. ...
标识字段和序列(Identity columns and Sequences) 5.1.4.5. 程序分配的标识符(Assigned Identifiers) 5.1.5. composite-id 联合ID 5.1.6. 识别器(discriminator) 5.1.7. 版本(version)(可选)...
标识字段和序列(Identity columns and Sequences) 6.1.4.5. 程序分配的标识符(Assigned Identifiers) 6.1.4.6. 触发器实现的主键生成器(Primary keys assigned by triggers) 6.1.5. composite-id 6.1.6. ...
6.1.2 从序列(Sequence)中获取自动增长的标识符 124 6.2 Java语言按内存地址区分不同的对象 125 6.3 Hibernate用对象标识符(OID)来区分对象 126 6.4 Hibernate的内置标识符生成器的用法 128 6.4.1 increment...
6.1.2 从序列(Sequence)中获取自动增长的标识符 6.2 Java语言按内存地址区分不同的对象 6.3 Hibernate用对象标识符(OID)来区分对象 6.4 Hibernate的内置标识符生成器的用法 6.4.1 increment标识符生成器 ...
6.1.2 从序列(Sequence)中获取自动增长的标识符 6.2 Java语言按内存地址区分不同的对象 6.3 Hibernate用对象标识符(OID)来区分对象 6.4 Hibernate的内置标识符生成器的用法 6.4.1 increment标识符生成器 ...
标识字段和序列(Identity columns and Sequences) 6.1.4.5. 程序分配的标识符(Assigned Identifiers) 6.1.4.6. 触发器实现的主键生成器(Primary keys assigned by triggers) 6.1.5. composite-id 6.1.6. ...
6.1.2 从序列(Sequence)中获取自动增长的标识符 6.2 Java语言按内存地址区分不同的对象 6.3 Hibernate用对象标识符(OID)来区分对象 6.4 Hibernate的内置标识符生成器的用法 6.4.1 increment标识符生成器 ...
标识字段和序列(Identity columns and Sequences) 5.1.4.5. 程序分配的标识符(Assigned Identifiers) 5.1.4.6. 触发器实现的主键生成器(Primary keys assigned by triggers) 5.1.5. composite-id 5.1.6. 鉴别...
标识字段和序列(Identity columns and Sequences) 6.1.4.5. 程序分配的标识符(Assigned Identifiers) 6.1.4.6. 触发器实现的主键生成器(Primary keys assigned by triggers) 6.1.5. composite-id 6.1.6....