Java标准版的EJB Persistence(一下)

下面是另外一个POJO——Person,我们已经对它进行了批注,以便保持;
@Entity
public class Person {
 private Long id;
 private String name;
 private Address address;
 public Person() {
 }
 @Id
 @GeneratedValue
 public Long getId() {
  return id;
 }
 public void setId(Long id) {
  this.id = id;
 }
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 @ManyToOne
 public  Address getAddress() {
  return address;
 }
 public void setAddress(Address address) {
  this.address = address;
 }
}
上面这段代码中重要的一部分是用于地址字段的@ManyToOne批注。@ManyToOne批注是用于描述实体之间关系的一系列批注之一;在本文里,它表示很多个人可能参考的是一个地址。这就要求参考与一个已经保持了的地址相对应。
Person person=new Person();
person.setName("John Doe");
person.setAddress(address);
em.merge(person);
Merge方法能够智能地处理交给它的实体。如果实体是非托管的,就保持它;否则它就会处理存在的差异,并根据需要对数据库进行更新。这用来处理正在被保持的Person。
这就是保持的基础概念。当然这要排除我们假设已经存在的EntityManagerFactory。这就是轮子碰到马路的情形。下面就是创建它的一个典型调用。
EntityManagerFactory emf=Persistence.createEntityManagerFactory("example"); 
我们要Persistence层根据“example”这个名字创建一个工厂。用来创建这个工厂的配置信息来自一个叫做persistence.xml的文件,这个文件应该在你源码树的META-INF目录下。它定义了一个带有名字的“persistence-unit”,它有应该如何管理persisitence的细节,底层的哪个persistence提供程序将完成这项任务,以及要用到哪个数据库。下面就是这个代码段:
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence">
<persistence-unit name="example">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>quick.Person</class>
<class>quick.Address</class>
 
<properties>…</properties>
</persistence-unit>
</persistence> 
这里,我们有一个名为“example”的persistence-unit,我们把这个名字交给createEntityManagerFactory()。我们联合使用Hibernate的Annotations和EntityManager,因此<provider>元素指向HibernatePersistence提供程序。
你可以有一个或者多个<class>元素,每一个都指向一个你想要保持的类。在这个例子里,你可以看到用于Person和Address的类元素。这里还有一个<properties>元素,它包含有用于设置实现具体值的<property>元素,这些值会被传递用来创建EntityManagerFactory。
在我们的例子里,我们使用Hibernate和嵌入的HSQLDB。我们需要设置JDBC驱动器来使用URL,以连接到数据库并告诉Hibernate要使用什么样的SQL语句:
<property name="hibernate.connection.driver_class" value="org.hsqldb.jdbcDriver"/> 
<property name="hibernate.connection.url" value="jdbc:hsqldb:data/example"/> 
<property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/> 
嵌入的HSQLDB要用“sa”用户名和空白密码才能启动。我们还想要限制hibernate取得相关对象的程度。
<property name="hibernate.connection.username" value="sa"/> 
<property name="hibernate.connection.password" value=""/>
 <property name="hibernate.max_fetch_depth" value="3"/> 
最后是hbm2ddl.auto属性。这用来控制Hibernate在SQL数据库里动态地创建所需表格的能力。如果被设置为“创建(create)”,它就会在每次运行的时候清除数据库并建立新的表格。如果设置为“更新(update)”,它就会尝试修改原有表格以适合当前版本的实体;
<property name="hibernate.hbm2ddl.auto" value="create"/> 
生成DDL来创建数据库是大多数实现里应该都有的东西,但是是否开启了这一功能就要看各个实现的具体情况了。
有了这个XML文件,你现在就有了足够的信息供createEntityManagerFactory创建简单的数据库。你会在本文附带的源代码里发现这个persistence.xml和示例代码。要让它运行起来,你就需要正确的库。首先,你需要从Hibernate的web网站获得HSQLDB数据库、
Hibernate、Hibernate-Annotations以及Hibernate-EntityManager。查看一下自述文件,看看你所需要的库可以从哪里获得。一旦让示例代码运行起来了,你就可以开始试验创建和保持一个简单的实体。如果想要看给persistence.xml属性加入SQL之后到底什么被执行,就要运行下面的代码;
<property name="hibernate.show_sql" value="true"/> 
那么Hibernate将在执行每个SQL语句的时候进行转储。
现在,我们已经知道了保持的基本概念和一些简单的映射。以后,我们将再看一些可用的批注,以及如何保持集合然后研究一下Glassfish里面的参考EJB persistence实现。
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值