知识大全 别让Hibernate偷走了你的标识符[4]

Posted

篇首语:谁和我一样用功,谁就会和我一样胜利。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 别让Hibernate偷走了你的标识符[4]相关的知识,希望对你有一定的参考价值。

别让Hibernate偷走了你的标识符[4]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  下面是我们改进过的Person类的Hibernate映射文件

<?XML version= ?><hibernate mapping package= my package ><class name= Person table= PERSON ><id name= id column= ID ><generator class= assigned /></id> <version name= version column= VERSION unsaved value= null /> <! Map Person specific properties here ></class></hibernate mapping>

  注意 id下面的generator标签包含了属性class= assigned 这个属性告诉Hibernate我们不是让数据库指派id值而是在我们的代码里面指派id值 Hibernate会简单地认为即使是新的 没有经过保存的对象也有id值 我们也给version标签新增了一个unsaved value= null 的属性 这个属性告诉Hibernate应该把version值而不是id值为null作为对象是新创建而成的指示器 我们也可以简单的告诉Hibernate把负值作为对象未经保存的指示器 如果你喜欢把version字段的类型设置为int而不是Integer 这将是很有用的

  我们已经从改用这样的纯净的对象id中获取了不少好处 我们对equals()和hashCode()方法的实现更加简单而且容易阅读 这些方法再也不易出错而且无论在保存对象之前还是之后 它们都能和Collection一起正常工作 Hibernate也能够变的更快一些 这是因为在保存新的对象之前它再也不需要从数据库读取一个序列值 此外 新定义的equals()和hashCode()对于一个包含id对象的对象来说是具有通用性的 这意味着我们可以把这些方法移动到一个抽象的父类当中去 我们不再需要为每一个域对象重新实现equals()和hashCode() 而且我们也不再需要考虑对于一个类来说哪些字段的组合是唯一且不变的 我们只要简单地继承这个抽象类 当然 我们没必要强迫我们的域对象继承一个父类 所以我们定义了一个接口来保证设计的灵活性

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接口而不是继承抽象类

cha138/Article/program/Java/ky/201311/28968

相关参考

知识大全 别让Hibernate偷走了你的标识符[3]

别让Hibernate偷走了你的标识符[3]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  当你

知识大全 别让Hibernate偷走了你的标识符[1]

别让Hibernate偷走了你的标识符[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  当对

知识大全 别让Hibernate偷走了你的标识符[5]

别让Hibernate偷走了你的标识符[5]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Pe

知识大全 别让Hibernate偷走了你的标识符[2]

别让Hibernate偷走了你的标识符[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Hi

知识大全 别让Hibernate偷走了您的身份

别让Hibernate偷走了您的身份  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  企业级Jav

知识大全 求一篇诗歌,急

求一篇诗歌,急!心灵之约谁偷走了你的青春谁搅乱你的舞步为何有早谢的花朵在枉费宝贵的桃李年华彷徨彷徨走不完命运的深巷何处是幸福的彼岸逃避逃避远离了万家灯火却挣不脱难言的忧烦放下你的包袱背起你的行囊年轻的

知识大全 映射对象标识符

精通Hibernate:映射对象标识符  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Java语

别让失眠加速你的衰老等

睡眠与生物钟障碍系列二别让失眠加速你的衰老睡眠是人类每天必不可少的生理活动。睡眠质量好坏、时间长短与人体健康、寿命长短息息相关。人过中年,不少人经常不能安眠,入睡难,易惊醒,多梦,醒后难再入睡。时间久

别让你的心“决堤”

韩国留学生赵承熙在美国弗吉尼亚理工大学杀人事件,被人们广泛关注。为什么现代物质文明发展到了前所未有的水平,却经常出现自残和凶杀?有学说认为,当一个人经历了自认为不公正的待遇,或者经历了重大的挫折后,就

别让你的婚姻跳槽

“模范丈夫”突然一反常态,执意要离婚,妻子极力挽救,可情况却变得越来越糟,这究竟是怎么了?芽让我们来看一看这位女士所面临的烦恼。一天,一位中年女士急匆匆地来到诊所。她的第一句话就是:“丈夫非要与我离婚