首先創建Student和Woker的實體類,在導入兩個實體類的hbm.xmljava
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="com.two.Student" table="t_hibernate_student"> <id name="sid" type="java.lang.Integer" column="sid"> <!-- <generator class="assigned" />人工控制數據類型不限--> <!-- <generator class="increment" /> --> <!-- <generator class="identity" />數據庫控制 數據庫沒有列段沒有自增回報錯,數字類型 --> <!-- <generator class="increment" /> hibernate控制--> <generator class="increment" /> <!-- <generator class="sequence" />String類型的ID --> <!-- <generator class="sequence" > <param name="sequence_name">aaa</param> </generator> --> <!-- <generator class="com.javaxl.two.id.Myts" /> --> </id> <property name="sname" type="java.lang.String" column="sname"> </property> </class> </hibernate-mapping>
主鍵策略分爲四種,人工控制,數據庫控制,以及hibernate控制,數據庫
generator中填的實際上是一個類
人工控制:app
數據庫變化:ide
而後在是數據庫控制數據ui
數據庫控制 數據庫沒有列段沒有自增會報錯,僅限數字類型spa
數據庫:hibernate
跟手動輸入的值沒有任何的關係,只會跟隨數據庫的自增而變化3d
自定義主鍵策略:code
package com.two; import java.io.Serializable; import java.text.SimpleDateFormat; import java.util.Date; import org.hibernate.HibernateException; import org.hibernate.engine.spi.SharedSessionContractImplementor; import org.hibernate.id.IdentifierGenerator; public class MyTsGenerator implements IdentifierGenerator { @Override public Serializable generate(SharedSessionContractImplementor arg0, Object arg1) throws HibernateException { // TODO Auto-generated method stub SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); return "book_order_"+sdf.format(new Date()); } }
能夠自定義將ID列段改爲自定義內容orm
須要將你本身寫的自定義的類的路勁寫入class
數據庫變化:
自定義uuid:
隨機生成32位的String數值
數據庫變化
這就是hibernate的主鍵策略