日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

hibernate框架之主键生成

發(fā)布時間:2023/12/3 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hibernate框架之主键生成 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
一、 hibernate 框架中主鍵的生成策略

?(1)native:?表示由設(shè)置的方言決定采用什么數(shù)據(jù)庫生成主鍵方式,根據(jù)底層數(shù)據(jù)庫能力選擇identity、sequence中的一個。

? 例如:在MySQL中會采用自增長的方式,主鍵字段必須都是整形類型;在Oracle數(shù)據(jù)庫中,會采用序列的增長方式。

?(2)sequence:?表示采用數(shù)據(jù)庫的序列生成主鍵,適用于OracleDB2數(shù)據(jù)庫中。

?(3)identity:?表示采用自增長的主鍵生成方式,適用于MySQL,SQL Server中。

?(4)foreign:使用另外一個相關(guān)聯(lián)的對象的標示符。通常和<one-to-one>配合使用

? ? ? ? ? ? ?————以上是數(shù)據(jù)庫生成主鍵(代理主鍵)?

?(5)increment:?表示由框架本身提供計數(shù)器,累加數(shù)據(jù),獲取主鍵。

?(6)uuid:?由框架根據(jù)參數(shù)(IP地址,JVM虛擬機啟動時間,系統(tǒng)時間,計數(shù)器等)生成3216進制的數(shù)字字符串。

? ? ? ? ? ? ?————以上是Hibernate框架生成主鍵值(代理主鍵)?

?(7)Assigned:?用戶(自己)提供主鍵。<generator>沒有指定時的默認生成策略


?(8)Hilo: 使用高低位算法生成主鍵,高低位算法使用一個高位值和一個低位值,然后把算法得到的兩個值拼接起來作為數(shù)據(jù)庫中的唯一主鍵。Hilo方式需要額外的數(shù)據(jù)庫表和字段提供高位值來源。默認情況下使用的表是hibernate_unique_key,默認字段叫作next_hi。next_hi必須有一條記錄否則會出現(xiàn)錯誤。
? ? ? ? ? 特點:需要額外的數(shù)據(jù)庫表的支持,能保證同一個數(shù)據(jù)庫中主鍵的唯一性,但不能保證多個數(shù)據(jù)庫之間主鍵的唯一性。Hilo主鍵生成方式由Hibernate 維護,所以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類

?

?

//當前的類是一個持久化類,是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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。