别让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接口而不是继承抽象类。
责编:豆豆技术应用
正在加载评论...