Hibernate 中采用JPA (java persistence api)Annotation
当采用Annotation来管理实体类之后,可以得到如下公式:
PO =PO +@Annotation;
使用Annotation来定义一个实体类。
Person.java
@Entity //标明这是一个持久化类
@Table(name="peroson_table") //标明对应的数据库表
public class Person
{
/*指定使用复合主键类是Name*/
@EmbeddedId //用于标注复合类型的标识属性
@AttributeOverrides({
@AttributeOverride(name="first",column=@Column(name="person_first")),/*标明属性对应对应的列*/
@AttributeOverride(name="last",columen=@Column(name="person_last",length=20))
})
private Name name;
//普通属性
@Column(name="person_email")
private String email;
@Embedded //用于标识一个组件属性
@AttributeOverrides({
@AttributeOverrides(name="name",column=@Column(name="cat_name",length=35)),
@AttributeOverrides(Name="color",column=@Column(name="cat_color"))
private Cat pet;//组件属性,代表此人拥有的宠物。
...Name属性的set和get方法
...Email属性的set和get方法
...pet属性的set和get方法
})
//Person的Name属性就是一个复合类型的标识属性;pet属性是一个组件属性
}
上面的程序用了Name类,它是一个Person类实体的标识属性的类型,程序使用@Embeddable标注它即可。
Name.java
//修饰组件属性类
@Embeddable
Piblic class Name implements java.io.Serializable
{
Private String first;
Private String last;
//无参数的构造器
Public name()
{
}
//初始化全局属性的构造器
Public Name(String first,String laset)
{
This.first=first;
This.last=last;
}
...first属性的set、get方法
...last属性的set、get方法
//提供重写的equals方法
Public boolean equals(Object obj)
{
If(this==obj)
{
Return true;
}
If(obj.getClass()==Name.class)
{
Name target = (Name)obj;
If(target.getFirst().equals(first) && target.getLast().equals(last))
{
Return true;
}
}
Return false;
}
//提供重写的hashCode方法
Public int hashCode()
{
Return fist.hashCode()+last.hashCod()*17;
}
}
上面的Name类需要作为标识属性的类型,因此一样需要实现java.io.Serializable接口,并重写了hashCode()和equals()两个方法。
至于Person类所包含的组件属性pet,它所包含的Cat类也只要简单地使用@Embeddable修饰即可。
Cat.java
@Embeddable //可嵌入的
Public class Cat
{
Private String name;
Private String color;
//无参数的构造器
Public Cat()
{
}
//初始化全部属性的构造器
Public Cat(String name,String color)
{
This.name=name;
This.color=color;
}
....name的set和get方法
...color的set和get方法
}
一旦在实体类中通过上面的Annotation进行标注之后。Hibernate已经能够理解实体类与数据表之间的映射关系了。也就不需要*.hbm.xml文件了。此时需要将hibernate.cfg.xml文件略做修改--告诉他去加载指定实体类,而不是根据映射文件加载。
Hibernate.cfg.xml
<?xml version="1.0" encoding="GBK"?>
...指定hibernate配置文件的DTD信息
<!--hibernate-configuration是连接配置文件的根元素-->
<hibernate-configuration>
<session-factory>
...其他配置属性
...罗列所有的持久化类
<mapping class="com.feng.app.domain.Person">
<session-factory>
</hibertat-configuration>