版本:hibernate-3.2.7 方法之一: 用uuid生成唯一的主键, 用这种方法,如果对象的id为null,保存时会自动生成一个UUID,如果id不为null,保存时会从数据库中找出这条记录,然后执行update,如果未找到是抛出异常。 Xxxclass.hbm.xml代码
- <id name="id" type="java.lang.String" column="ID">
- <generator class="uuid.hex" />
- </id>
Xxxclass.java代码
- public class XXXClass{
- /** id */
- private String id;
-
- public void setId(String id) {
- this.id = id;
- }
-
- public String getId() {
- return id;
- }
- }
方法之二: 用org.hibernate.id.UUIDHexGenerator生成唯一的主键, 用这种方法,如果对象的id为null,保存时会自动生成一个UUID,如果id不为null,保存时会从数据库中找出这条记录,然后执行update,如果未找则执行insert。 Xxxclass.hbm.xml代码
- <id name="id" type="java.lang.String" column="ID">
- <generator class="AssignCopiedId" />
- </id>
Xxxclass.java代码
- 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;
- }
- }
Assignedidmodel.java代码
- public interface AssignedIdModel {
-
- public String getAssignedId();
-
- }
Assigncopiedid.java代码
- 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);
- }
- }
- }
总结: 两种方法相比之下,方法一比较简单,能满足一般情况,项目中用的比较多。方法一无法处理时才用方法二,例如从其它系统数据库复制表的记录时用。 Hibernate主键生成方式及配置MySQL主从复制、基于SSL的主从复制、主主复制、半同步复制相关资讯 Hibernate教程
- Hibernate的批量处理-批量更新 (06/30/2012 06:48:35)
- Hibernate二级缓存相关属性 (06/30/2012 06:46:44)
- Hibernate主键生成方式及配置 (06/01/2012 11:44:36)
| - Hibernate的批量处理-批量插入 (06/30/2012 06:47:18)
- Hibernate事务属性 (06/30/2012 06:44:56)
- Hibernate 主键自动生成的方法 (06/01/2012 11:39:56)
|
本文评论 查看全部评论 (0)