<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"src/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.sanmao.hibernate.crud.domain.Person">
<id name="pid" length="5" column="pid" type="java.lang.Long">
<generator class="identity"></generator>
</id>
<property name="name" length="20"></property>
<property name="sex" length="20"></property>
</class>
</hibernate-mapping>
主键生产器中inc
inc
的主键的自增长,所以用到identity ,数据库必须要支持自增长,所以inc
identity 慢,但是主键连续,而identity连续被删除后,之后就不再连续
public class HibernateUtil {
public static SessionFactory sessionFactory;
static {
Configuration configuration=new Configuration();
configuration.configure();
sessionFactory=configuration.buildSessionFactory();
}
}
package com.sanmao.hibernate.generator.test;
import com.sanmao.hibernate.crud.domain.Person;
import com.sanmao.hibernate.generator.test.utils.HibernateUtil;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test;
/**
* 主键生成器
*/
public class GeneratorTest extends HibernateUtil {
/**
*
* Hibernate: select max(pid) from Person
*Hibernate: insert into Person (name, sex, pid) values (?, ?, ?)
* 1.先查询该表中主键的最大值
* 2.把最大值加1作为新的主键
* 这种情况下主键必须是数字类型
* increment
* 尽管通过程序设置主键的值,也不起作用
* */
@Test
public void testIncrement(){
Session session=sessionFactory.openSession();
Transaction transaction=session.beginTransaction();
Person person=new Person();
person.setName("chaochao");
person.setSex("man");
session.save(person);
transaction.commit();
session.close();
}
/**
* assigned
* 该策略必须通过程序设置
* 自己设置参数
* */
@Test
public void testassigned(){
Session session=sessionFactory.openSession();
Transaction transaction=session.beginTransaction();
Person person=new Person();
person.setPid(1L);
person.setName("chaochao");
person.setSex("man");
session.save(person);
transaction.commit();
session.close();
}
/**
* 利用数据库的表的主键的自动增长设置
* Identity
* identity要求数据库中表的主键要自增长
* 否则会报错(表不支持的错误)
* */
@Test
public void testIdentity(){
Session session=sessionFactory.openSession();
Transaction transaction=session.beginTransaction();
Person person=new Person();
person.setName("chaochao");
person.setSex("man");
session.save(person);
transaction.commit();
session.close();
}
/**
* UUID
* Hibernate 生成一串字符串
* */
@Test
public void testUuid(){
Session session=sessionFactory.openSession();
Transaction transaction=session.beginTransaction();
Person person=new Person();
person.setName("chaochao");
person.setSex("man");
session.save(person);
transaction.commit();
session.close();
}
}