java学习:Hibernate学习-用oracle sequence序列生成ID的配置示例

上回继续,TMP_EMP中的ID是根据序列SQ_TMP_EMP来生成的,需要在TmpEmp.hbm.xml中设置:

  <id name="id" type="long">
   <column name="ID" not-null="true" sql-type="NUMBER" unique="true"/>
  <generator class="sequence">
    <param name="sequence">SQ_TMP_EMP</param>    
   </generator>
  </id>

这样运行时,Hibernate就会自动从SQ_TMP_EMP中取nextval用来填充到ID字段中

示例代码:

先创建一个工具类

package app;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;

public class HibernateUtils {
	
	private HibernateUtils(){
		
	}
	
	static SessionFactory sessionFactory;
	
	/*
	 * 取得Hibernate的Session
	 */
	public static Session getSession(){
		if (sessionFactory == null) {
			sessionFactory = new Configuration().configure().buildSessionFactory();
		}
		return sessionFactory.openSession();
	}
	
	
	/*
	 * insert记录
	 */
	public static  boolean addObject(Object obj){
		Session ss = null;
		Transaction ts = null;
		boolean result = false;
		try		
		{
			ss = getSession();
			ts = ss.beginTransaction();
			ss.save(obj);
			ts.commit();
			result = true;
		}
		finally{
			ss.close();
		}		
		return result;
		
	}

}

添加记录的类

package app;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import domain.TmpEmp;

import java.math.BigDecimal;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

public class Hello {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		TmpEmp emp = new TmpEmp();
		emp.setName("张三峰");
		emp.setSalary(new BigDecimal(1000));
		emp.setSex('M');		
		emp.setBirthday(new Date(1985-1900,12-1,1));//1985-12-1号
		boolean b = HibernateUtils.addObject(emp);
		if (b){
			System.out.println("插入成功,新记录的ID是:" + emp.getId());
		}
		else{
			System.out.println("插入失败!");
		}
		
	}

	

}

运行结果:

Hibernate: select IGSA.SQ_TMP_EMP.nextval from dual Hibernate: insert into IGSA.TMP_EMP (NAME, BIRTHDAY, SEX, SALARY, ID) values (?, ?, ?, ?, ?) 插入成功,新记录的ID是:210  

当然,除用.hbm.xml来配置外,等效的注解方式,可以参考下面的写法:

1     @Id    
2     @SequenceGenerator(name="bkdex_seq_generator",sequenceName="SQ_BKD_EX")
3     @GeneratedValue(generator="bkdex_seq_generator",strategy=GenerationType.SEQUENCE)
4     @Column(name = "ID", unique = true, nullable = false, precision = 22, scale = 0)
5     public BigDecimal getId() {
6         return this.id;
7     }

基本上这样就行了,但是实际运行会发现sequence每次并不是加1,而是一个其它的数,如果想要每次加1,参考下面这样:

1     @Id
2     @SequenceGenerator(name = "SEQ_ORDER", sequenceName = "SEQ_ORDER", allocationSize = 1)
3     @GeneratedValue(generator = "SEQ_ORDER", strategy = GenerationType.SEQUENCE)
4     @Column(name = "ID", unique = true, nullable = false, precision = 22, scale = 0)
5     public BigDecimal getId() {
6         return this.id;
7     }
allocationSize=1 这个是关键

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏HansBug's Lab

1455: 罗马游戏

1455: 罗马游戏 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 721  Solved: 272 [Subm...

316100
来自专栏Y大宽

RNA-seq数据分析工具详细介绍(从质量控制到可视化)

33530
来自专栏菩提树下的杨过

ExtJs+WCF+LINQ实现分页Grid

上篇文章《用ExtJs+Linq+Wcf打造简单grid 》,这个网格控件不带分页,本文在上文的基础上添加分页功能,文中会着重介绍如何在用LINQ返回分页数据,...

36770
来自专栏我杨某人的青春满是悔恨

教你写个多表视图

如图所示的多表视图是一个很常用的东西,之前我是用UIScrollView和UITableViewController做的。把当前的控制器作为一个父控制器,添加三...

19130
来自专栏移动端开发

Swift 2.0 UItableView 的简单使用

在IOS开发中,UItableView 的使用真的是最常见最普通的了,现在在自学swift 今天也是这用Swift 写了写 UItableview的使用,还有一...

24490
来自专栏Y大宽

金黄葡萄球菌RNA-seq数据分析

这里出现问题了,突变株的比对率太低,不到1%,这是不可能的,怀疑样品污染,然后随机挑选了5条序列blast了下,发现应该是被溶血葡萄球菌污染。

17120
来自专栏PPV课数据科学社区

【学习】七天搞定SAS(一):数据的导入、数据结构

SAS的数据类型 ? 首先,sas的编程大概就两块:Data和PROC,这个倒是蛮清晰的划分。然后目前关注data部分。 SAS的数据类型还真的只有两种:数字和...

416120
来自专栏zaking's

RFC2616-HTTP1.1-Header Field Definitions(头字段规定部分—单词注释版)

16220
来自专栏10km的专栏

Ubuntu16:cmake生成Makefile编译caffe过程(OpenBLAS/CPU+GPU)塈解决nvcc warning:The 'compute_20', 'sm_20'

之前在ubuntu14下实现了Caffe编译(参见去年写的博客 《 Ubuntu14:cmake生成Makefile编译caffe过程(OpenBLAS/CPU...

58780
来自专栏Golang语言社区

在Go中使用服务对象模式

NOTE: Most of the code and ideas in this post are things I have been experimenti...

11320

扫码关注云+社区

领取腾讯云代金券