<?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="com.pojo.Users"> <id name="id" type="java.lang.Integer"> <generator class="native"></generator> </id> <property name="name" length="20" not-null="true" unique="true" update="false" insert="true"/> <property name="email"/> </class> </hibernate-mapping>
這裏沒有指定column屬性表示與name值相同
length="20" 如果前臺提交過來的值長度超過20的話Hibernate會拋出異常
not-null="true" 如果前臺提交過來的值是空的Hibernate會拋出異常
unique="true" 如果前臺提交過來的值已經在數據中存在Hibernate會拋出異常(Hibernate會自動去判斷是否在數據庫是有重複數據)
update="false" 表示該字段不參與更新操作(Hibernate不會產生該字段的SQL語句)
insert="true" 表示該字段參與插入操作。
<hibernate-mapping>
<class name="com.pojo.Users">
可以修改成如下表示方法
<hibernate-mapping package="com.pojo">
<class name="Users">
<generator class="native"></generator>是主鍵生成策略,是Hibernate自動生成的。
這裏講解下代理主鍵和業務主鍵的概念
代理主鍵是指與業務無關且能唯一標識數據庫中記錄,一般是數據庫自動生成的,比如mysql可以使用auto_increment,Sql2000可以使用identity生成方式,oracle可以使用sequence生成方式
業務主鍵指業務相關,由用戶指定,且能唯一標識數據庫中的任意一條記錄,也叫自然主鍵
Hibernate可以幫助生成業務主鍵
<generator class="native"></generator>就是一種生成方式,下面我說詳細說下hibernate中業務主鍵的生成方式:
increment:以遞增方式生成OID,每次加1
identiry:由底層數據庫生成OID,條件是數據庫支持自動增加的字段
sequence: hibernate根據底層數據庫的序列來生成OID,條件是數據庫支持序列
hilo:根據high/low算法生成OID,Hibernate根據待定表的字段作爲high值,默認採用hibernate_unique_key表的next_hi值
seqhilo:hibernate3.0出現,根據高氏位算法生成主鍵,需要給頂一個序列。
native:根據數據庫的情況自動選擇OID生成的方式
uuid.hex:採用128位的uuid算法生成OID,佔用空間大
assigned:由JAVA應用程序負責生成主鍵,適用於自然主鍵