存档: 标签: ‘JPA’

Hibernate Object Persistence

没有评论 2010年3月3日

上篇文章讲到了Java  Persistence API(Java 数据持久化API),hibernate作为JPA的一种实现,是一个数据持久化组件。所谓对象持久化(Object Persistence),就是把数据保存在永久存储介质中(数据库)。 继续阅读…

Java Persistence API

没有评论 2010年3月2日

今天看了看关于JPA(Java Persistence API)的一些知识,并在myeclipse 8里参照帮助文档里的学习文档写出了第一个JPA工程,初步的了解了在myeclipse 上如何方便利用JPA进行持久化操作的代码开发。很久没有接触持久化操作的代码开发了,决定找些实例回忆一下持久化操作的操作方法与步骤。 继续阅读…

Hibernate 开发步骤

没有评论 2009年5月17日

1.Object Relation Mapping
持久化类与关系表对应,持久化类实例与表中一行记录对应。
2.相关名词:
POJO(Plain Old Java Objects):实际就是普通JavaBeans,使用POJO名称是为了和EJB混淆起来, 而且简称比较直接.在Hibernate中代表包含Setter、Getter这些最基本操作的值对象。
BO:代表包含一些业务逻辑的值对象,它的作用域很大,也就是说BO在充当持久类的同时可以传到UI层。 PO代表持久对象,是纳入Hibernate管理框架中的,在一定程度上可以和值对象的概念互换,值对象经过Hibernate
进行处理,就变成了PO。
Hibernate配置文件:
hibernate.cfg.xml或 hibernate.properties,不过推荐使用XML格式。
映射文件*.hbm.xml:映射文件的作用是将POJO与关系型数据库数据相绑定,作为一个桥梁。
OID: Hibernate中用对象标识符OID来维持java对象和表中记录的对应关系,OID定义为整数类型(short、int、long),通常由Hibernate或通过底层数据库给OID赋值。
持久化类:被Hibernate持久化到数据库中,通过Setter和Getter方法,若为boolean型则可用is*方法。Hibernate不要求持久化类必须实现Serializable,但在分布式不同结点间传输持久化类必须实现Serializable接口
3.在开发Hibernate应用的时候需要预先把相应的JAR包配置到CLASS_PATH,我使用的是MyEclipse作为开发工具,主要的JAR大致如下:
—antlr.jar
—cglib.jar
—asm.jar
—asm-attrs.jar
—commons-collections.jar
—commons-logging.jar
—ehcache.jar
—hibernate3.jar
—jta.jar
—dom4j.jar
—log4j.jar

4.开发Hibernate程序的步骤
开发Hibernate程序通常分为下面这几步:
1>、 建立JavaBean–> 每个JavaBean必须提供一个无参的构造函数,并为private属性提供get/set访问方法。如下:

[code lang="Java"]
package com.kettas.hibernate.orm.m2m;
import java.util.HashSet;
import java.util.Set;
public class Student {
private Integer sid; //oid属性,用于与数据的表中主键相对应
private String sname; // syudent age sex 为业务属性
private int age;
private String sex;
private Set courses=new HashSet(); //关系属性,用于维护实体之间的关系

public Student() { //提供一个默认的构造方法,便于hibernate底层使用发射机制
super();
}

public Student(String sname, int age, String sex) {
this.sname = sname;
this.age = age;
this.sex = sex;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

public Set getCourses() {
return courses;
}

public void setCourses(Set courses) {
this.courses = courses;
}

public String getSex() {
return sex;
}

public void setSex(String sex) {
this.sex = sex;
}

public Integer getSid() {
return sid;
}

public void setSid(Integer sid) {
this.sid = sid;
}

public String getSname() {
return sname;
}

public void setSname(String sname) {
this.sname = sname;
}
}

[/code]

———-field和property的区别以及应注意事项——————-
区别:
field指用privat关键字修饰的变量sid,sname,age,sex,而private指的是setter和getter方法去掉set和get得到的将大写字母转换为小写的字母的变量。
注意:
(2)javabean中的setter和getter后面的名字一定要与field的值相对应 如 priavte String sname ,getSname(),setSname(),这点很重要,不然hibernate
读取配置文件会报错
(2)每个JavaBean必须提供一个无参的构造函数,并为private属性提供get/set访问方法。

5.标准的配置文件
< ?xml version=”1.0″ encoding=”UTF-8″?>
< !DOCTYPE hibernate-configuration PUBLIC
“-//Hibernate/Hibernate Configuration DTD 3.0//EN”
“http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd”>

thread

true true

org.hibernate.dialect.Oracle9Dialect

oracle.jdbc.driver.OracleDriver kettas kettas jdbc:oracle:thin:@192.168.0.200:1521:kettas

2 2 5000 100 3000 2 false

20 false

说明:
1.指明配置文件所在地方,在这里包结构用/连接不是用.
2.配置文件放在实体类所在位置,一般是放在entity包内与实体类在一起。

——————–>映射文件:
< ?xml version=”1.0″?>
< !DOCTYPE hibernate-mapping PUBLIC
“-//Hibernate/Hibernate Mapping DTD 3.0//EN”
“http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd”>

czj_hibernate_student_seq

czj_hibernate_course_seq

映射文件说明:
Java database
calss(entity) table
object(persistent object) row
field column(oid—-k)
relation pk,fk
1> 标签用于指定哪一个类对应数据库中哪一个表
package属性用于指定本映射文件中包含类的包名为全局包,从而不必为每个类指定完整包名。
2> 标签用于指定java中oid对应于数据库中的哪一列
指定以哪种方式生成数据库中主键标识符
———–常见标识符生成器————————–
Hibernate中内置标识符生成器,均适合代理主键
increment:由Hibernate自增生成
identity:由底层数据库生成
sequence:底层数据库序列生成
hilo:根据high/low等算法生成以特定表字段作high值
native:自动选择identity、dequence、hilo
assgned:自然主键(尽量避免使用)
————————————————
3>

说明: 标签指定java中的关系对应数据库中的表与表之间的关系
inverse属性: 为避免Hibernate在清理缓存时对相关联对象都执行更新操作,将inverse设置为true,将主控权交给many一方,以仅控mamy方状态更新对象。
不加默认为false,双方都不维护java类中的关系,运行会报错,此属性只用在one-to-many many-to-many中
cascade属性: 级联属性,当cascade属性设置为delete,在删除一对象时自动删除与其级联的对象,删除后持久化对象变为临时状态。
中column列值指的是Course类对应czj_hibernate_relation中的course_id这一列
指明Student这一类中的关系属性Set集合中Course类在java中与Student类的关系

6。hiberante开发步骤
1>写实体层中的实体类
2>在数据库中建表
3>写配置文件和映射文件
4>写Dao层,在此层写hibernate应用程序
———————-hibernate应用程序步骤—————————
1>、创建配置(Configuration)
Configuration cfg = new Configuration().configure();
2>、构建会话工厂(SessionFactory)
SessionFactory = cfg.buildSessionFactory();
3>、打开会话(session)
Session session = sf.openSession();
4>、启动事务(Transaction)
Transaction ts = session.beginTransaction();
5>、持久化操作(CUQD)
session.save(*); *表示一个对象
session.update(*);
session.delete(*);
6>、提交事务(commit) ts.commit();
7>、事务回滚(rollback) ts.rollback();