文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Hibernate映像文件是什么

2023-06-17 21:38

关注

这篇文章主要讲解了“Hibernate映像文件是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Hibernate映像文件是什么”吧!

Hibernate映像文件实例

们已经从改用这样的纯净的对象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接口而不是继承抽象类。

public class Person extends AbstractPersistentObject {   // Person-specific fields and behavior here  }

从上一个例子开始Hibernate映像文件就不会再改变了。我们不想麻烦Hibernate去了解抽象父类,相对的,我们只要保证每个持久化对象的映射文件包含一个id项(和一个被指派的生成器)和一个带有unsaved- value="null"属性的version标签。机敏的读者可能已经注意到,每当一个持久化对象被实例化的时候,它的id值得到了指派。这意味着当Hibernate在内存中创建一个已经保存过的对象时,虽然这个对象是已经存在并从数据库中读取的,它也会得到一个新的id。这不会产生问题,因为Hibernate会接着调用对象的setId()方法,用保存的真实id来替换新分配的id。剩下的id生成器并不是问题,因为实现它的算法是轻量级的(也就是说,它并不牵扯到数据库)。

到现在为止一切都很好,但是我们遗漏了一个重要的细节:如何实现IdGenerator.createId().我们可以为我们理想中的键值生成器(key-generation)算法定义一些标准。
◆键值可以不牵扯到数据库而很轻量级的产生
◆即使跨越不同的虚拟机和不同机器,键值也要保证***性。
◆如果可能键值可以由其它程序,编程语言和数据库生成,至少要能和它们兼容

感谢各位的阅读,以上就是“Hibernate映像文件是什么”的内容了,经过本文的学习后,相信大家对Hibernate映像文件是什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯