别让Hibernate偷走了你的标识符

http://tech.ddvip.com   2006年11月20日    社区交流

本文详细介绍别让Hibernate偷走了你的标识符

public interface PersistentObject {
 public String getId();
 public void setId(String id);
 public Integer getVersion();
 public void setVersion(Integer version);
}
public abstract class AbstractPersistentObject implements PersistentObject {
 private String id = IdGenerator.createId();
 private Integer version;
 public String getId() { return id;
}
public void setId(String id) { this.id = id; }
public Integer getVersion() { return version; }
public void setVersion(Integer version) { this.version = version; }
public boolean equals(Object o) {
 if (this == o) return true;
 if (o == null || !(o instanceof PersistentObject)) { return false; }
 PersistentObject other = (PersistentObject)o;
 // if the id is missing,
 return false
 if (id == null) return false;
 // equivalence by id
 return id.equals(other.getId());
}
public int hashCode() {
 if (id != null) {
  return id.hashCode();
 } else {
  return super.hashCode();
 }
}
public String toString() {
 return this.getClass().getName() + "[id=" + id + "]";
}
}

  现在我们有了一个简单而高效的方法来创建域对象。它们继承了AbstractPersistentObject,这个父类能在它们第一次被创建时自动赋予它们一个id并且恰当的实现了equals()和hashCode()这两个方法。域对象也得到了一个对toString()方法的合理的缺省实现,这个方法可以有选择地被重写。如果这是一个查询例子的测试对象或者例子对象,id值时可以被改变或者被设为null。否则它是不应当被改变的。如果因为某些原因我们需要创建一个继承自其它类的域对象,这个对象就应当实现PersistentObject接口而不是继承抽象类。

责编:豆豆技术应用

正在加载评论...