Hibernate主鍵的生成方式


1、assigned 所有的數據庫都適用;

      在調用save()方法之前,要對主鍵設置值,不設置報錯;

      <generator class="assigned"></generator>

2、increment 按照數據庫的一個順序值來增長;

     適用於mysql、oracle、db2、sqlserver、h2等數據庫;

     注意: 每次新增前,都會查詢主鍵的最大值;

     然后在其基礎上加1,作為新增的主鍵值;

    <generator class="increment"></generator>

3、identity 根據底層數據庫的能力,來作為主鍵的自增長策略;

     適用於 mysql、db2、sqlserver等;

      不適用於oracle數據庫;

     <generator class="identity "></generator>

4、sequence 根據底層數據庫支持的能力,來作為主鍵值的生成策略;

      適用於oracle、db2數據庫;

      不適用於mysql、sqlserver數據庫;

           <generator class="sequence">

               <param name="property">user5.seq_aa</param>

          </generator>

5、native 根據底層數據庫支持的自增長能力,自動選擇hilo、identity、sequence其中的一個來完成該主鍵的自增長;

      mysql數據庫中: <generator class="native"></generator> oracle的數據庫中

         <generator class="native">

              <param name="sequence_name">seq_aa</param>

         </generator>

6、uuid 主鍵為varchar類型;

     生成16進制 32位的字符串類型;

     生成的數據唯一;

     適用於mysql、oracle、sqlserver、db2等數據庫;

     <generator class="uuid"></generator>

7、foreign : 表關系中 再講;

   -- 悲觀鎖: select 列名.... from 表名稱 [where .....] for update;

 

 

PersonBean.xml文件

<?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.bwf.code.bean.PersonBean" table="person" schema="user5">
<!-- id標簽表示主鍵
name 表示模型bena中的屬性名稱
column 表示表結構中的列名稱
generator 表示主鍵的約束, identity表示主鍵在數據庫中自增長;
-->
<id name="id" type="java.lang.Long">
      <column name="pid" sql-type="int"></column>
      <generator class="sequence">
           <param name="property">user5.seq_aa</param>
      </generator>
</id>

<property name="name" column="pname" type="java.lang.String"></property>
<property name="birthday" column="birthday" type="java.lang.String"></property>

<property name="sex" column="sex"></property>
<property name="phone"></property>
</class>
</hibernate-mapping>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM