hibernate 自定義主鍵生成器
阿新 • • 發佈:2019-01-05
給大家分享一個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>