Hibernate 中采用JPA (java persistence api)Annotation 札记

来源:互联网 发布:在线浏览器代理软件 编辑:程序博客网 时间:2024/04/30 11:17

Hibernate 中采用JPA java persistence apiAnnotation

当采用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属性的setget方法

...Email属性的setget方法

...pet属性的setget方法

})

//PersonName属性就是一个复合类型的标识属性;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属性的setget方法

...last属性的setget方法

//提供重写的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;

}

....namesetget方法

...colorsetget方法

}

一旦在实体类中通过上面的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>

原创粉丝点击