Hibernate主键ID自动生成两种方法示例

[size=medium]版本:hibernate-3.2.7
[color=green]方法之一: 用uuid生成唯一的主键, 用这种方法,如果对象的id为null,保存时会自动生成一个UUID,如果id不为null,保存时会从数据库中找出这条记录,然后执行update,如果未找到是抛出异常。[/color][/size]


<id name="id" type="java.lang.String" column="ID">
<generator class="uuid.hex" />
</id>




public class XXXClass{
/** id */
private String id;

public void setId(String id) {
this.id = id;
}

public String getId() {
return id;
}
}


[size=medium][color=green]方法之二: 用org.hibernate.id.UUIDHexGenerator生成唯一的主键, 用这种方法,如果对象的id为null,保存时会自动生成一个UUID,如果id不为null,保存时会从数据库中找出这条记录,然后执行update,如果未找则执行insert。[/color][/size]



<id name="id" type="java.lang.String" column="ID">
<generator class="AssignCopiedId" />
</id>




public class XXXClass implements AssignedIdModel{
/** id */
private String id;

public void setId(String id) {
this.id = id;
}

public String getId() {
return id;
}

@Override
public String getAssignedId() {
return assignedId;
}

public void setAssignedId(String assignedId) {
this.assignedId = assignedId;
}
}





public interface AssignedIdModel {

public String getAssignedId();

}




import org.hibernate.engine.SessionImplementor;
import org.hibernate.id.UUIDHexGenerator;

public class AssignCopiedId extends UUIDHexGenerator {
public Serializable generate(SessionImplementor session, Object obj) {
if (obj instanceof AssignedIdModel
&& (((AssignedIdModel) obj).getAssignedId() != null
&& ((AssignedIdModel) obj).getAssignedId().trim().length() > 0)) {
return ((AssignedIdModel) obj).getAssignedId();
} else {
return super.generate(session, obj);
}
}
}


[size=medium]
[color=green]总结: 两种方法相比之下,方法一比较简单,能满足一般情况,项目中用的比较多。方法一无法处理时才用方法二,例如从其它系统数据库复制表的记录时用。[/color][/size]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值