Hibernate学习(四)ID生成策略

由于一般在数据中总有一个标识列是需要唯一标识的,在MySql里面定义标识列用的是auto_increment,在oracle里面用的是sequence,利用hibernate我们也可以不用指定实体类中与标识列对应的属性,让hibernate为我们自动在数据中递增插入列,以MySql为例:
首先建表:

create table Student2 (
id int primary key auto_increment,
name varchar(20)
);

对应的实体类:

public class Student2 {

	private int id;
	private String name;
	

	public Student2( String name) {
		this.name = name;
	}
	
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	
}

Student2.hbm.xml:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
        
<hibernate-mapping package="com.zxf.model">

    <class name="Student2" table="Student2">
       	<id name="id">
       		<generator class="identity"></generator>
        </id>
        <property name="name"/>
    </class>

</hibernate-mapping>

ID生成中重点是generator的配置,常用的有四项,native,合适选择,比如用的是mysql就会使用auto_increment的机制,用的是oracle,就会使用sequence的机制,用的是sqlserver,就会使用identity机制;

identity,用的是auto_increment或者identity(sqlserver);sequence,用的是oracle中的sequence;uuid,这个与.net里面的guid类似,不过是字符串型,所以在数据库中和实体类中相关的属性或

列都得是字符串型的。
Junit测试:

@Test
 public void hibernateTest03() {
  Student2 s2 = new Student2("Jaon");//未设定主键
  Session session = sf.openSession();
  
  session.beginTransaction();
  session.save(s2);
  session.getTransaction().commit();
  
  session.close();
  sf.close();
 }

上面并没有指定s2的id属性,数据库中已成功插入。

假如使用的是注解:则在id属性上如下:

@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
 public int getId() {
  return id;
 }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值