Java 持久性 API (JPA)
JPA 可用于创建面向对象的关系数据库实体版本,供开发者在其应用程序中使用。
您可以使用 JPA 来提供注释和 XML 扩展,这些注释和扩展可用于描述其数据库中的表及其内容,包括数据类型,键和表之间的关系。 开发者可以使用 API 来执行数据库操作,而不是使用 SQL。
CICS® 支持 jpa-2.0, jpa-2.1, jpa-2.2和 persistence-3.0。 有关这些版本的不同信息,请参阅 Java 持久性 API (JPA) 功能部件概述。
Entity objects是简单的 Java 类,可以是具体的,也可以是抽象的。 每个都表示数据库表中的一行,属性和字段用于维护状态。 每个字段都映射到表中的列,并添加有关该特定字段的键信息; 例如,可以指定主键或不能为空的字段。@Entity @Table(name = "JPA") public class Employee implements Serializable { @Id @Column(name = "EMPNO") private Long EMPNO; @Column(name = "NAME", length = 8) private String NAME; private static final long serialVersionUID = 1L; public Employee() { super(); } public Long getEMPNO() { return this.EMPNO; } public void setEMPNO(Long EMPNO) { this.EMPNO = EMPNO; } public String getNAME() { return this.NAME; } public void setNAME(String NAME) { this.NAME = NAME; } }EntityManagerFactory用于为持久性单元生成EntityManager。EntityManager维护应用程序正在使用的entity objects的活动集合。 您可以使用EntityManager类来初始化这些类,并创建用于管理数据完整性的事务。 接下来,在使用Entity事务落实数据之前,使用Entity类get和set方法与数据进行交互。以下示例包含用于插入记录的样本代码:
@WebServlet("/Create") public class Create extends HttpServlet { private static final long serialVersionUID = 1L; @PersistenceUnit(unitName = "com.ibm.cics.test.wlp.jpa.annotation.cics.datasource") EntityManagerFactory emf; InitialContext ctx; /** * @throws NamingException * @see HttpServlet#HttpServlet() */ public Create() throws NamingException { super(); ctx = new InitialContext(); } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Get the servlet parms String id = request.getParameter("id"); String name = request.getParameter("name"); // Create a new employee object Employee newEmp = new Employee(); newEmp.setEMPNO(Long.valueOf(id)); newEmp.setNAME(name); // Get the entity manager factory EntityManager em = emf.createEntityManager(); // Get a user transaction UserTransaction utx; try { // Start a user transaction and join the entity manager to it utx = (UserTransaction) ctx.lookup("java:comp/UserTransaction"); utx.begin(); em.joinTransaction(); // Persist the new employee em.persist(newEmp); // End the transaction utx.commit(); } catch(Exception e) { throw new ServletException(e); } response.getOutputStream().println("CREATE operation completed"); } }@PersistenceUnit表示对EntityManagerFactory及其关联持久性单元的依赖关系。 persistence.xml 文件中定义的持久性单元的名称。 要将实体和表连接到数据库,请在捆绑软件中创建 persistence.xml 文件。 persistence.xml 文件描述了这些实体连接到的数据库。 该文件包含重要信息,例如提供程序的名称,实体本身,数据库连接 URL 和驱动程序。以下示例包含样本 persistence.xml:
<?xml version="1.0" encoding="UTF-8"?> <persistence version="2.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_2_0.xsd"> <persistence-unit name="com.ibm.cics.test.wlp.jpa.annotation.cics.datasource"> <jta-data-source>jdbc/jpaDataSource</jta-data-source> <class>com.ibm.cics.test.wlp.jpa.annotation.cics.datasource.entities.Employee</class> <properties> <property name="openjpa.LockTimeout" value="30000" /> <property name="openjpa.Log" value="none" /> <property name="openjpa.jdbc.UpdateManager" value="operation-order" /> </properties> </persistence-unit> </persistence>