千家信息网

Hibernate持久化技术怎么理解

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,本篇内容主要讲解"Hibernate持久化技术怎么理解",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Hibernate持久化技术怎么理解"吧!在一般应用程
千家信息网最后更新 2026年11月03日Hibernate持久化技术怎么理解

本篇内容主要讲解"Hibernate持久化技术怎么理解",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Hibernate持久化技术怎么理解"吧!

在一般应用程序中,用来实现业务问题实体的(如,在电子商务应用程序中的Customer和Order) 类就是持久化类。不能认为所有的持久化类的实例都是持久的状态--一个实例的状态也可能 是瞬时的或脱管的。

如果这些Hibernat持久化类遵循一些简单的规则,Hibernate能够工作得更好,这些规则也被称作 简单传统Java对象(POJO:Plain Old Java Object)编程模型。但是这些规则并不是必需的。 实际上,Hibernate3对于你的持久化类几乎不做任何设想。你可以用其他的方法来表达领域模型: 比如,使用Map实例的树型结构。

一个简单的POJO例子说明Hibernate持久化
大多数Java程序需要用一个持久化类来表示猫科动物。

package eg;  import java.util.Set;  import java.util.Date;   public class Cat {      private Long id; // identifier       private Date birthdate;      private Color color;      private char sex;      private float weight;      private int litterId;       private Cat mother;      private Set kittens = new HashSet();       private void setId(Long id) {          this.id=id;      }      public Long getId() {          return id;      }       void setBirthdate(Date date) {          birthdate = date;      }      public Date getBirthdate() {          return birthdate;      }       void setWeight(float weight) {          this.weight = weight;      }      public float getWeight() {          return weight;      }       public Color getColor() {          return color;      }      void setColor(Color color) {          this.color = color;      }       void setSex(char sex) {          this.sex=sex;      }      public char getSex() {          return sex;      }       void setLitterId(int id) {          this.litterId = id;      }      public int getLitterId() {          return litterId;      }       void setMother(Cat mother) {          this.mother = mother;      }      public Cat getMother() {          return mother;      }      void setKittens(Set kittens) {          this.kittens = kittens;      }      public Set getKittens() {          return kittens;      }            // addKitten not needed by Hibernate      public void addKitten(Cat kitten) {          kitten.setMother(this);      kitten.setLitterId( kittens.size() );           kittens.add(kitten);      }  }

这里要遵循四条主要的规则:

1. 实现一个默认的(即无参数的)构造方法(constructor)

Cat有一个无参数的构造方法。所有的持久化类都必须有一个 默认的构造方法(可以不是public的),这样的话Hibernate就可以使用 Constructor.newInstance()来实例化它们。 我们强烈建议,在Hibernate中,为了运行期代理的生成,构造方法至少是 包(package)内可见的。

2. 提供一个标识属性(identifier property)(可选)

Cat有一个属性叫做id。这个属性映射数据库表的主 键字段。这个属性可以叫任何名字,其类型可以是任何的原始类型、原始类型的包装类型、 java.lang.String 或者是 java.util.Date。 (如果你的遗留数据库表有联合主键,你甚至可以用一个用户自定义的类,该类拥有这些类型 的属性。参见后面的关于联合标识符的章节。)

标识符属性是可选的。可以不用管它,让Hibernate内部来追踪对象的识别。 但是我们并不推荐这样做。

实际上,一些功能只对那些声明了标识符属性的类起作用:

托管对象的传播性再连接(级联更新或级联合并) --参阅 第 10.11 节 "传播性持久化(transitive persistence)"

◆Session.saveOrUpdate()

◆Session.merge()

我们建议你对持久化类声明命名一致的标识属性。我们还建议你使用一 个可以为空(也就是说,不是原始类型)的类型。

3. 使用非final的类 (可选)

代理(proxies)是Hibernate的一个重要的功能,它依赖的条件是,持久 化类或者是非final的,或者是实现了一个所有方法都声明为public的接口。

你可以用Hibernate持久化一个没有实现任何接口的final类,但是你 不能使用代理来延迟关联加载,这会限制你进行性能优化的选择。

你也应该避免在非final类中声明 public final的方法。如果你想使用一 个有public final方法的类,你必须通过设置lazy="false" 来明确地禁用代理。

4. 为持久化字段声明访问器(accessors)和是否可变的标志(mutators)(可选)

Cat为它的所有持久化字段声明了访问方法。很多其他ORM工具直接对 实例变量进行持久化。我们相信,在关系数据库schema和类的内部数据结构之间引入间接层(原文为"非直接",indirection)会好一些。默认情况下Hibernate持久化JavaBeans风格的属性,认可 getFoo,isFoo 和 setFoo这种形式的方法名。 如果需要,你可以对某些特定属性实行直接字段访问。

属性不需要要声明为public的。Hibernate可以持久化一个有 default、protected或private的get/set方法对的属性进行Hibernate持久化。

TODO:property和proxy包里的用户扩展框架文档。

到此,相信大家对"Hibernate持久化技术怎么理解"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

属性 方法 类型 实例 标识 字段 数据 规则 代理 技术 原始 实际 对象 建议 数据库 标识符 程序 联合 内容 功能 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 亿人帮互联网科技有限公司 互联网科技公司起名 互联网与科技金融数据 世界互联网领先科技成果 猫创互联网科技 互联网科技创新企业排名 哈尔滨秒房互联网科技有限公司 深圳互联网科技怎么样 宝灵互联网科技有限公司 互联网与医疗科技 伊宁互联网科技做什么的 美国互联网科技公司 互联网科技包装股份有限公司上市 南京一网一红互联网科技有限公司 国产互联网科技公司 中国科技和美国互联网 银川新华互联网科技学校原画 北京品多多互联网科技有限公司 优雇互联网科技有限公司 小牛互联网科技有限公司地址 互联网高科技 互联网佳科技有限公司 西安纸贵互联网科技有限公司 厦门中拓互联网络科技有限公司 华宇互联网科技 云电互联网科技 深圳天众互联网科技公司 湖南诚度互联网科技有限公司 长沙茂晟互联网科技有限公司 神州科技互联网有限公司
0