`
michael8335
  • 浏览: 184414 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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=?

以上是本人的解决方法,不知道是否合理和妥当,或者有没有其他更好的解决方案呢??
0
0
分享到:
评论

相关推荐

    hibernate 教程

    标识字段和序列(Identity columns and Sequences) 5.1.4.5. 程序分配的标识符(Assigned Identifiers) 5.1.5. composite-id 联合ID 5.1.6. 识别器(discriminator) 5.1.7. 版本(version)(可选)...

    jax-ws 方式发布web Service 后台用Hibernate实现,前端.NET通过引用服务方式实现

    rar中包含整个项目的源码和数据库生成脚本,采用jax-ws发布Web Service服务,支持java客户端和.Net客户端调用,数据库采用oracle10g,里面有创建数据库脚本文件createTable_Oracle10g.sql,由于Hibernate映射表中会...

    Hibernate实战(第2版 中文高清版)

     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 小结  ...

    Hibernate注解

    * 7.sequence 调用谨慎数据库的序列来生成主键,要设定序列名,不然hibernate无法找到。 * 例:@GeneratedValue(generator = "paymentableGenerator") * @GenericGenerator(name = "paymentableGenerator", ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

     6.1.2 从序列(Sequence)中获取自动增长的标识符 6.2 Java语言按内存地址区分不同的对象 6.3 Hibernate用对象标识符(OID)来区分对象 6.4 Hibernate的内置标识符生成器的用法  6.4.1 increment标识符生成器  ...

    Hibernate 中文 html 帮助文档

    标识字段和序列(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. 鉴别...

    最全Hibernate 参考文档

    标识字段和序列(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. 鉴别...

    精通hibernate:对象持久化技术孙卫琴第二版part2

    6.1.2 从序列(Sequence)中获取自动增长的标识符 124 6.2 Java语言按内存地址区分不同的对象 125 6.3 Hibernate用对象标识符(OID)来区分对象 126 6.4 Hibernate的内置标识符生成器的用法 128 6.4.1 increment...

    Hibernate教程

    标识字段和序列(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. ...

    hibernate 体系结构与配置 参考文档(html)

    标识字段和序列(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. ...

    hibernate

    标识字段和序列(Identity columns and Sequences) 5.1.4.5. 程序分配的标识符(Assigned Identifiers) 5.1.5. composite-id 联合ID 5.1.6. 识别器(discriminator) 5.1.7. 版本(version)(可选)...

    Hibernate3的帮助文档

    标识字段和序列(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. ...

    精通Hibernate:对象持久化技术第二版part3

    6.1.2 从序列(Sequence)中获取自动增长的标识符 124 6.2 Java语言按内存地址区分不同的对象 125 6.3 Hibernate用对象标识符(OID)来区分对象 126 6.4 Hibernate的内置标识符生成器的用法 128 6.4.1 increment...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part4

     6.1.2 从序列(Sequence)中获取自动增长的标识符 6.2 Java语言按内存地址区分不同的对象 6.3 Hibernate用对象标识符(OID)来区分对象 6.4 Hibernate的内置标识符生成器的用法  6.4.1 increment标识符生成器  ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part3

     6.1.2 从序列(Sequence)中获取自动增长的标识符 6.2 Java语言按内存地址区分不同的对象 6.3 Hibernate用对象标识符(OID)来区分对象 6.4 Hibernate的内置标识符生成器的用法  6.4.1 increment标识符生成器  ...

    hibernate3.04中文文档.chm

    标识字段和序列(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. ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part1.rar

     6.1.2 从序列(Sequence)中获取自动增长的标识符 6.2 Java语言按内存地址区分不同的对象 6.3 Hibernate用对象标识符(OID)来区分对象 6.4 Hibernate的内置标识符生成器的用法  6.4.1 increment标识符生成器  ...

    Hibernate3+中文参考文档

    标识字段和序列(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. 鉴别...

    hibernate 框架详解

    标识字段和序列(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....

Global site tag (gtag.js) - Google Analytics