Hibernate主键ID自动生成两种方法示例
Hibernate主键ID自动生成两种方法示例
版本: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);
- }
- }
- }
总结: 两种方法相比之下,方法一比较简单,能满足一般情况,项目中用的比较多。方法一无法处理时才用方法二,例如从其它系统数据库复制表的记录时用。
评论暂时关闭