快速业务通道

EJB3 Persistence API标准化持久性 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-22

标准化O-R映射

可以使用Java元数据注释或XML实现实体的O-R映射。EJB3 JPA定义了多种用于O-R映射的注释,例如Table、SecondaryTable、Column、JoinColumn和PrimaryKeyJoinColumn。请参阅EJB3 JPA规范,以获得关于所有注释的信息。

在我们的示例中,可以使用Table注释定义实体被映射到的表,如下所示:

@Table(name="DEPT") public class Department implements Serializable {

EJB3 JPA严重依赖于默认设置,因此如果未定义表映射,则持久性提供程序会假定此实体被映射到与实体类同名的表(在我们的示例中是DEPARTMENT)。如果实体被映射到多个表,则可以使用SecondaryTable注释。

可以使用Column注释将持久字段或属性映射到数据库列,如下所示:

@Column(name="DNAME") protected String name;

这里,DNAME是持久字段名称所映射到的列的名称。如果未使用Column注释定义O-R映射,则持久性引擎会尝试将其状态保存在列中(使用与字段或属性相同的名称)。

实体继承性

EJB3 JPA支持多种实体继承性方法。它需要两种类型的继承性表映射策略:Single-table-per-entity层次结构策略和Joined-Subclass策略。最好避免使用可选的table-per-class层次结构。

Single-table-per-entity (SINGLE_TABLE)层次结构策略允许将层次结构中的所有实体映射到一个表。在我们的示例中,FullTime和Contractor扩展了Employee,所有这些都可以映射到一个名为EMP的表。换句话说,所有与Employee、FullTime和Contractor有关的数据都被存储于相同的表内。

如果使用Joined Subclass策略,则可以将公共持久数据存储在超类所映射到的表中(例如Employee),并且可以为层次结构中每个子类创建表,以便存储特定于子类的持久字段。

必须在超类中使用Inheritance注释,以指定继承类型,如以下代码所示。此示例展示了使用single-table-per-entity层次结构策略的实体层次结构。

@Entity @Table(name="EMP") @Inheritance(strategy=InheritanceType.SINGLE_TABLE) @DiscriminatorColumn(name="EMPLOYEE_TYPE", discriminatorType=DiscriminatorType.STRING, length=1) public abstract class Employee implements Serializable { ... }

每个子类必须指定用于该实体类型的鉴别器值,如下所示:

@Entity @DiscriminatorValue(value="F") public class FullTime extends Employee { @Column(name="SAL") protected Double salary; @Column(name="COMM") protected Double commission; @Column(name="DESIG") protected String designation; ... }

EJB3 Persistence API标准化持久性(4)

时间:2010-12-31 bea Debu Panda

Entity Manager API:用于实体操作的标准API

javax.persistence.EntityManager管理实体生命周期,并公开了多个在实体上执行CRUD操作的方法。

EntityManager API在事务上下文中调用。可以在EJB容器外部(例如,从一个Web应用程序)调用它,而无需会话bean外观。

在执行任何实体操作之前,必须获取EntityManager实例。可以使用容器管理或应用程序管理的实体管理器,可以使用JNDI查找或依赖注入来获取EntityManager实例。正如其名称所暗示的,Java EE容器管理着容器管理实体管理器的生命周期。它可能主要在企业Java应用程序中使用。

可以使用PersistenceContext注入获取容器管理实体管理器实例,如下所示:

@PersistenceContext(unitName="onjava") private EntityManager em;

如果使用应用程序管理的实体管理器,则必须管理其生命周期。可以创建一个应用程序管理实体管理器实例,如下所示:

@PersistenceUnit(unitName="onjava") pri

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号