别让Hibernate偷走了你的标识符

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

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

public class Person {
 // assign an id as soon as possible
 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;
 }
 // Person-specific fields and behavior here
 public boolean equals(Object o) {
  if (this == o) return true;
  if (o == null || !(o instanceof Person)) return false;
  Person other = (Person)o;
  if (id == null) return false;
  return id.equals(other.getId());
 }
 public int hashCode() {
  if (id != null) {
   return id.hashCode();
  } else {
   return super.hashCode();
  }
 }
}

  这个例子使用id作为equals()方法判断等价的标准以及hashCode()返回哈希值的来源。这就简单了许多。但是,要让它正常工作,我们需要两样东西。首先,我们需要保证每个对象在被保存之前都有一个id值。在这个例子里,当id变量被声明的时候,它就被指派了一个值。其次,我们需要一种判断这个对象是新生成的还是之前保存过的的手段。在我们最早的例子中,Hibernate检查id字段是否为空来判断对象是否时新生成的。既然我们的对象id永远不为空,这个方法显然不再有效。为了解决这个问题,我们可以很容易的配置Hibernate,让它检查version字段,而不是id字段是否为空。version字段是一个更为恰当的用来判断你的对象是否被保存过的指示器。

责编:豆豆技术应用

正在加载评论...