hibernate框架之主键生成
?(1)native:?表示由設(shè)置的方言決定采用什么數(shù)據(jù)庫生成主鍵方式,根據(jù)底層數(shù)據(jù)庫能力選擇identity、sequence中的一個。
? 例如:在MySQL中會采用自增長的方式,主鍵字段必須都是整形類型;在Oracle數(shù)據(jù)庫中,會采用序列的增長方式。
?(2)sequence:?表示采用數(shù)據(jù)庫的序列生成主鍵,適用于Oracle,DB2數(shù)據(jù)庫中。
?(3)identity:?表示采用自增長的主鍵生成方式,適用于MySQL,SQL Server中。
?(4)foreign:使用另外一個相關(guān)聯(lián)的對象的標(biāo)示符。通常和<one-to-one>配合使用
? ? ? ? ? ? ?————以上是數(shù)據(jù)庫生成主鍵(代理主鍵)?
?(5)increment:?表示由框架本身提供計數(shù)器,累加數(shù)據(jù),獲取主鍵。
?(6)uuid:?由框架根據(jù)參數(shù)(IP地址,JVM虛擬機(jī)啟動時間,系統(tǒng)時間,計數(shù)器等)生成32位16進(jìn)制的數(shù)字字符串。
? ? ? ? ? ? ?————以上是Hibernate框架生成主鍵值(代理主鍵)?
?(7)Assigned:?用戶(自己)提供主鍵。<generator>沒有指定時的默認(rèn)生成策略
?(8)Hilo: 使用高低位算法生成主鍵,高低位算法使用一個高位值和一個低位值,然后把算法得到的兩個值拼接起來作為數(shù)據(jù)庫中的唯一主鍵。Hilo方式需要額外的數(shù)據(jù)庫表和字段提供高位值來源。默認(rèn)情況下使用的表是hibernate_unique_key,默認(rèn)字段叫作next_hi。next_hi必須有一條記錄否則會出現(xiàn)錯誤。
? ? ? ? ? 特點(diǎn):需要額外的數(shù)據(jù)庫表的支持,能保證同一個數(shù)據(jù)庫中主鍵的唯一性,但不能保證多個數(shù)據(jù)庫之間主鍵的唯一性。Hilo主鍵生成方式由Hibernate 維護(hù),所以Hilo方式與底層數(shù)據(jù)庫無關(guān),但不應(yīng)該手動修改hi/lo算法使用的表的值,否則會引起主鍵重復(fù)的異常。?
? ? ? ? ? ? ————用戶提供主鍵(自然主鍵)?
二、javaBean 的hibernate的hbn.xml配置id主鍵生成
com.hibernate.User類
?
package com.hibernate;public class User { ? ?private String id; ? ?private String username; ? ?private String password; ? ?public String getId() { ? ?return id; ? ?} ? ?public void setId(String id) { ? ?this.id = id; ? ?} ? ?public String getUsername() { ? ?return username; ? ?} ? ?public void setUsername(String userName) { ? ?this.username = userName; ? ?} ? ?public String getPassword() { ? ?return password; ? ?} ? ?public void setPassword(String password) { ? ?this.password = password; ? ?} ? ? }??
User.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> <!-- 類與數(shù)據(jù)庫的表對應(yīng) --> <class name="com.hibernate.User" table="user"> <!-- 主鍵名 --> <id name="id" column="id"> <!-- 生成策略 --> <generator class="uuid"/> </id> <!-- 其他類屬性與表字段 --> <property name="username" column="username"/> <property name="password"/> </class> </hibernate-mapping>?
hibernate 配置文件
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory > <!-- mysql數(shù)據(jù)庫驅(qū)動 --> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <!-- mysql數(shù)據(jù)庫名稱 --> <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate_db</property> <!-- 數(shù)據(jù)庫的登陸用戶名 --> <property name="hibernate.connection.username">root</property> <!-- 數(shù)據(jù)庫的登陸密碼 --> <property name="hibernate.connection.password">admin</property> <!-- 方言:為每一種數(shù)據(jù)庫提供適配器,方便轉(zhuǎn)換 --> <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> <!--配置類與表的映射文件 --> <mapping resource="com/hibernate/User.hbm.xml"/></session-factory> </hibernate-configuration>?
三、javaBean的hibernate的Annotation注解配置id主鍵生成
?
com.hibernate.User類
?
?
//當(dāng)前的類是一個持久化類,是User 這個類。他映射了一個表user。所對應(yīng)的 數(shù)據(jù)庫是hibernate_db //這句:@Table(name = "user", catalog = "hibernate_db") 可以省略 @Entity @Table(name = "user", catalog = "hibernate_db") public class User { // 主鍵 :@Id 主鍵生成方式:strategy = "increment"//映射表中id這個字段,不能為空,并且是唯一的@GenericGenerator(name = "generator", strategy = "increment") @Id@GeneratedValue(generator = "generator")@Column(name = "id", unique = true, nullable = false)private String id; //映射表中username這個字段 ,長度是500@Column(name = "username", length = 500)private String username; //不寫注解代表屬性名與表名相同,不需要映射類的屬性使用注解@Transientprivate String password; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String userName) { this.username = userName; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }?
?
hibernate 配置文件
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory > <!-- mysql數(shù)據(jù)庫驅(qū)動 --> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <!-- mysql數(shù)據(jù)庫名稱 --> <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate_db</property> <!-- 數(shù)據(jù)庫的登陸用戶名 --> <property name="hibernate.connection.username">root</property> <!-- 數(shù)據(jù)庫的登陸密碼 --> <property name="hibernate.connection.password">admin</property> <!-- 方言:為每一種數(shù)據(jù)庫提供適配器,方便轉(zhuǎn)換 --> <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> <!--配置類映射文件 --> <mapping class="com.hibernate.User"/></session-factory> </hibernate-configuration>?
?
?
總結(jié)
以上是生活随笔為你收集整理的hibernate框架之主键生成的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何写出更好的提案——亚当·亨彭斯托尔访
- 下一篇: ug需要什么显卡?