native ------- 根据底层数据库判断自行使用idenyity sequence hilo 等中的一种sequence 时默认的seq名为 hibernate_sequence
uuid -------- 必须是的字符串,数据库中字段要大于32位
identity --------- 必须是整型 数据库有自增长功能
increment --------- 主键顺序递增推荐使用 可以跨平台
assigned --------- 可以Set Id 所以setId就不能是private的了
seqhilo --------- 支持sequence的hilo算法
foreign ---------- 一对一是主键生成规则
用法如下:
<hibernate-mapping>
<class name="com.pannuo.entity.User" table="tb_user">
<id name="userId" column="USERID" type="int">
<generator class="native"/>
</id>
</class>
</hibernate-mapping>
sequence (数据库支持)(IBM DB2,Oracle)
如下:
<id name="userId" column="USERID" type="int">
<generator class="sequence">
<param name="sequence">my_sequence</param>
<param name="parameters">INCREMENT BY 1 START WITH 1</param>
</generator>
</id>
hilo 算法(可以使用到任何数据库 算法需要两张表)
如下:
<id name="userId" column="USERID" type="int">
<generator class="hilo">
<param name="table">tb_hi</param>
<param name="column">nextvalue</param>
<param name="max_lo">0</param>
</generator>
</id>
tb_hi(nextvalue int)
联合主键
<composite-id>
<key-property name="userId" column="USERID" type="string"/>
<key-property name="userName" column="USERNAME" type="string"/>
</composite-id>
Session get(User,UserS)UserS要setId 和 setName
也可以把联合主键拿出来作为一个主键类UserPK配置如下:
<composite-id name="userPK" class="com.pannuo.entity.UserPK"
unsaved-value="any">
<key-property name="userId" column="USERID" type="string"/>
<key-property name="userName" column="USERNAME" type="string"/>
</composite-id>
Session get(User,PK)PK要setId 和 setName
重写
@Override
public boolean equals(Object obj) {
if (obj == this) {
return true;
}
if (!(obj instanceof UserA)) {
return false;
}
UserA user = (UserA)obj;
return new EqualsBuilder()
.append(this.userId, user.getUserId())
.append(this.userName, user.getUserName())
.isEquals();
}
@Override
public int hashCode() {
return new HashCodeBuilder()
.append(this.userId)
.append(this.userName)
.toHashCode();
}