开发 JPA Project
1.新建名称为 simpleJPA 的 JPA 工程,Configuration 为 Default Configuration for JBoss v4.2,选中 Add project to anEAR,如下图:
图 5. 创建 JPA 项目
点击 Next,选择默认,点击完成。
2.编辑 JPA persistence.xml 文件,内容如下:
清单 1. JPA persistence.xml 文件
<persistence version="1.0"
xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
<persistence-unit name="simpleJPA">
<!-- 使用JBoss默认的数据源 -->
<jta-data-source>java:/DefaultDS</jta-data-source>
<properties>
<!-- 使用Hibernate的hbm2ddl工具在启动时生成表结构 -->
<property name="hibernate.hbm2ddl.auto" value="update"/>
<!-- 显示最终执行的SQL -->
<property name="hibernate.show_sql" value="true" />
<!-- 格式化显示的SQL -->
<property name="hibernate.format_sql" value="true" />
</properties>
</persistence-unit>
</persistence>
persistence-unit 节点可以有一个或多个,每个 persistence-unit 节点定义了持久化内容名称、使用的数据源及持久化产品专有属性。 name 属性定义了 persistence-unit 的名称,该属性是必需的,本例设置的名称为“ simpleJPA ”。
在 JavaEE 环境中的默认的事务是 JTA,而在 JavaSE 环境中则为 RESOURCE_LOCAL 。使用
3.新建名称为 org.zhouxing.simple.Product 的 Entity class, 根据示例介绍小节中的 UML 类图添加 Entity Fields,如下图:
图 6. 新建 Entity class
id 为主键,在 EJB3.0 中,每个实体 Bean 必须具有一个主键,主键可以是基本类型,也可以是一个类。主键既作为实体 Bean 在内存中的标识符,也作为数据表中一行的标识符。它在实体 Bean 中是不可缺少的,并且必须是唯一的
表名为 product。实体 Bean 的成员属性分别映射到 product 表的对应字段。
4.修改主键的生成方式为自增,给主键添加如下代码:
@javax.persistence.GeneratedValue 注释指定主键值生成方式,该注释与 @Id 注释结合使用在主键属性上。只有在使用持久化驱动生成数据表 schema 时才需指定该注释。如果您的数据表已经存在,那么该注释不需要指定。 strategy() 属性指定字段值生成策略。 GenerationType.AUTO:由容器根据数据库类型选择一种合适的生成方式,这种方式带有随机性,不同的 JPA 实现产品的做法各有不同 (JBoss 将 JPA 实现为 Hibernate),对于本文而言,Hibernate 知道 HSQL 支持 ID 自增长,所以会选择 GenerationType.IDENTITY。
清单 2. 修改之后的代码
import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
/**
Entity implementation class for Entity: Product
*/
@Entity
@Table(name = "product")
public class Product implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
private String name;
private String description;
private Double price;
private Integer inventory;
public Product() {
super();
}
...setters,getters 方法省略
}
@javax.persistence.Entity 注释指明这是一个实体 Bean,name() 属性指定实体 bean 的名称,在本文中没有为该属性提供取值,默认值为 bean class 的非限定类名。 @javax.persistence.Table 注释指定了实体 Bean 所要映射的表,name() 属性指定映射表的名称。如果缺省 @Table 注释,系统默认采用实体名称作为映射表的名称。在本文中采用的表名为product 。
至此 JPA Project 完成,接下来是 EJB Project 。