`

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

    博客分类:
  • SSH
阅读更多
版本:hibernate-3.2.7
方法之一: 用uuid生成唯一的主键, 用这种方法,如果对象的id为null,保存时会自动生成一个UUID,如果id不为null,保存时会从数据库中找出这条记录,然后执行update,如果未找到是抛出异常。


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


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


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



总结: 两种方法相比之下,方法一比较简单,能满足一般情况,项目中用的比较多。方法一无法处理时才用方法二,例如从其它系统数据库复制表的记录时用。
分享到:
评论
1 楼 dragonxiong 2012-03-30  
  又在玩这个。。。。

相关推荐

Global site tag (gtag.js) - Google Analytics