给大家分享一个hibernate 自定义主键生成器
AssgnedTemp .java
package com.zking.test;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.zking.entity.Temps;
public class AssgnedTemp {
Configuration configuration = null;
SessionFactory sessionFactory = null;
Session session = null;
Transaction transaction = null;
@Before
public void before() {
configuration = new Configuration().configure();
sessionFactory = configuration.buildSessionFactory();
// 方法的执行对象
session = sessionFactory.openSession();
// 提交数据一般用事务方式
transaction = session.beginTransaction();
}
@After
public void after() {
// 提交数据
transaction.commit();
// 关闭数据库的操作对象
session.close();
sessionFactory.close();
}
@Test
public void assgneindadd() {
// 保存数据
// 1. 创建对象
Temps temps = new Temps();
temps.setName("zhansas");
// 2.提交数据
session.save(temps);
}
}
1.建一个 *.hbm.xml 用来指定主键生成器 <generator class="com.zking.generator.MyCenerator" >
2.创建主键生成器需实现 org.hibernate.id.IdentifierGenerator
MyCenerator.java
package com.zking.generator;
import java.io.Serializable;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.engine.spi.SharedSessionContractImplementor;
import org.hibernate.id.IdentifierGenerator;
import com.zking.entity.Temps;
public class MyCenerator implements IdentifierGenerator {
Temps temps = null;
public Serializable generate(SharedSessionContractImplementor session, Object object) throws HibernateException {
find();
return temps.getId() + 1;
}
public void find() {
Configuration configuration = new Configuration().configure();
SessionFactory sessionFactory = configuration.buildSessionFactory();
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
temps = session.find(Temps.class, "w191");
transaction.commit();
// 关闭数据库的操作对象
session.close();
sessionFactory.close();
}
}
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 2018-9-5 19:22:39 by Hibernate Tools 3.5.0.Final -->
<hibernate-mapping>
<class name="com.zking.entity.Temps" table="temp">
<id name="id" type="java.lang.String">
<column name="tid" />
<!-- <generator class="guid" /> -->
<generator class="com.zking.generator.MyCenerator" >
<param name="sequence_name">abc</param>
</generator>
</id>
<property name="name" type="java.lang.String">
<column name="tname" />
</property>
</class>
</hibernate-mapping>