主键生成方式

来源:互联网 发布:在mac上拖拽文件 编辑:程序博客网 时间:2024/05/16 05:40

     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();
    }