持久化类就是系统中有关业务实体的类(例如;电子商务系统中的
顾客类和订单类)。 并不是所有的持久化类的实例都处于持久化状态,
—— 可能是临时态(transient)或游离态(detached)。
如果遵守一些简单的约定,hibernate会工作的更好。 然而,这些
约定都不是强制的。事实上,Hibernate3 采取了遵守更少约定的策略。
你可以使用其他方式来表达一个实体域: 例如, 使用map树。
4.1 一个简单的POJO例子
大部分的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);
}
}
这里主要有4个规则去遵守。
4.1.1 一个无参的构造方法
Cat 拥有一个无参的构造方法。 所有的持久化类都应该有一个默认的
无参的构造方法(可以不为public)以便hibernate调用Constructor.newInstance()
来对它进行实例化。我们强烈建议至少拥有一个包可见性的
默认构造方法。
4.1.2 提够一个标识符属性(可选)
Cat用户一个名为id的标识符。此属性映射到数据库表的主键列。
可以使用任何的基本类型或基本类型的包装类或 java.lang.String 或 java.util.Date来作为标识符。
(如过你的遗留数据库采用组合键, 你可以自定义一个class, class
属性为组合键)
标识符属性不是必须的,你可以不写(但不推荐)
我们建议你在持久化类中使用一致的标识符。我们更加建议
使用一个非null(不是基本类型)的类型。
4.1.3推荐使用非final的类(可选)
Hibernate的一个典型特征是代理,proxy依赖于非final 且 方法类型为
public的类。
你可以借助Hibernate持久化一个final类型的class, 但是, 此种情况你
便不能使用延迟加载,这也在一定程度上限制了你的程序。
你也应该避免使用final类型的方法。如果你使用了final类型的方法,
你必须设置lazy="false"。
4.1.4 声明持久化字段的set/get
Cat为所有的持久化字段声明了访问方法。
属性无需声明为public类型,Hibernate可以持久化任何一个具有默认
访问类型 或private或protected类型的属性。
4.2 实现继承
一个子类必须遵守第一和第二条规定。他从父类中继承标识符。
package eg;
public class DomesticCat extends Cat {
private String name;
public String getName() {
return name;
}
protected void setName(String name) {
this.name=name;
}
}
4.3 实现equals() 和hashCode()
如果你打算将持久化类的游离态的实例放到一个set中去时你必须复写equals()和
hashCode()方法。因为Hibernate只能在一个session内部保证java标识符和
数据库主键列相等。
推荐使用业务字段来实现equals()和hashCode(), 而不是主键。
public class Cat {
...
public boolean equals(Object other) {
if (this == other) return true;
if ( !(other instanceof Cat) ) return false;
final Cat cat = (Cat) other;
if ( !cat.getLitterId().equals( getLitterId() ) ) return false;
if ( !cat.getMother().equals( getMother() ) ) return false;
return true;
}
public int hashCode() {
int result;
result = getMother().hashCode();
result = 29 * result + getLitterId();
return result;
}
}
4.4 动态模型
注意: 动态模型短时间内仍处于试验状态, 有可能会进行修改。
持久化的实体无需在运行期间被声明为POJO类型或一个javabean。Hibernate
支持动态模型和以DOM4j树的形式来展现实体。通过这种方法,你可以仅仅使用
映射文件来描述一个持久化类。
默认情况下,Hibernate工作在POJO模式下,你可以使用default_entity_mode
来设定一个默认模式。
分享到:
相关推荐
Hibernate中根据数据库中各表,使用myEclipse的返向工程,自动生成hibernate.cfg.xml 配置文件 与person.hbm.xml映射文件和持久化类 (图文介绍)
一个简单的java持久化类,接受ResultSet参数,转化为对象数组
利用XDoclet从Java持久化类生成hibernate mapping,hibernate.cfg.xml和mysql数据库脚本。
持久化类主键生成策略+例子 jpa 4种 hibernate 13种
Android中使用Ormlite实现持久化(二)--持久化类的详细配置.docx
Hibernate中根据数据库中各表,使用myEclipse的返向工程,自动生成hibernate.cfg.xml 配置文件 与person.hbm.xml映射文件和持久化类 (图文介绍)
主要介绍了Myeclipse 自动生成可持久化类的映射文件的方法的相关资料,这里提供了详细的实现步骤,需要的朋友可以参考下
Hibernate、iBATIS、TopLink、Castor JDO、Apache OJB等这么多持久层框架,你还在为学习上面那个框架而苦恼吗?你还为研究下一代是那个而头疼吗? 朋友,学习JPA吧!JPA的出现就是解决您上面的苦恼的。
主要介绍了Java的Hibernate框架中的持久化类和映射文件,Hibernate是Java的SSH三大web开发框架之一,需要的朋友可以参考下
4. 持久化类(Persistent Classes) 4.1. 一个简单的POJO例子 4.1.1. 实现一个默认的(即无参数的)构造方法(constructor) 4.1.2. 提供一个标识属性(identifier property)(可选) 4.1.3. 使用非final的类 (可...
本章主要介绍单个持久化类与单个数据库表之间进行映射的方法,尤其是当持久化类的属性不和数据库表的字段一一对应时的映射技巧。 5.1 持久化类的属性及访问方法 101 5.1.1 基本类型属性和包装类型属性 102 5.1.2 ...
3.4.2 把Customer持久化类映射到CUSTOMERS表 3.5 通过Hibernate API操纵数据库 3.5.1 Hibernate的初始化 3.5.2 访问Hibernate的Session接口 3.6 运行helloapp应用 3.6.1 创建运行本书范例的系统环境 ...
本章主要介绍单个持久化类与单个数据库表之间进行映射的方法,尤其是当持久化类的属性不和数据库表的字段一一对应时的映射技巧。 5.1 持久化类的属性及访问方法 101 5.1.1 基本类型属性和包装类型属性 102 5.1.2 ...
2、 观察持久化类与数据库表的映射关系,观察相应的 Hibernate 映射文件 (.hbm.xml)配置,并能够做简单应用; 3、 观察 Hibernate 配置文件(hibernate.cfg.xml)中的主要元素及属性配置,并能够做简单应用。
hibernate的知识:持久化类(Persistent Classes)、对象关系数据库映射基础(Basic OR Mapping)、集合类(Collections)映射、关联关系映射、拦截器与事件(Interceptors and events)等。
代码清晰容易接受,如果忘记了可以拿出来参考哦
叙述了属性容器类及其对象持久化的方法
#PDO PHP 持久化类#####使用示例: 注意:参数必须在关联数组中 在 PHP 5.4 中有一个简短的语法说明: ["key" => "value"]; 在以前的版本中应该使用旧格式: array("key" => "value"); $bd = 新 bd; 不带参数执行...
3.4.2 把Customer持久化类映射到CUSTOMERS表 3.5 通过Hibernate API操纵数据库 3.5.1 Hibernate的初始化 3.5.2 访问Hibernate的Session接口 3.6 运行helloapp应用 3.6.1 创建运行本书范例的系统环境 ...