官术网_书友最值得收藏!

Java Persistence API (JPA)

Before we start wielding JPA and CDI together, let’s get the basics out of the way for JPA. The Java Persistence API allows for the modelling of the domain objects for accessing, persisting, and managing data between POJOs and a relational database. JPA is the standard for working with object-relational mapping (ORM) solutions. Popular ORM solutions include Hibernate, EclipseLink (the reference implementation for all JPA versions), Apache OpenJPA, and DataNucleus. JPA puts the focus back on the domain model for retrieving and persisting data without having to deal with resource management and vendor specific SQL.

Most developers would be accustomed to hearing about Hibernate in articles and projects; it also shows up as a skill sought by employers. While Hibernate and the like can be used directly, using JPA helps us avoid falling in the vendor lock-in pit and in turn maintains portability. Hibernate is bundled as the default ORM for RedHat/JBoss servers, while EclipseLink (RI) is bundled as part of Glassfish and Payara. Similarly, Apache OpenJPA is used in TomEE.

JPA has been tagged as a maintenance release, which has led to minor but noteworthy updates in JPA 2.2. This release brings with it support for Java 8 and better CDI integration.

It all starts with an EntityManager. To work with JPA, you must obtain an EntityManager instance, which acts as the gateway to perform any database operation. The steps are outlined here:

  1. Create persistence.xml and define one or more persistence-unit in it:
      <?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">

<persistence-unit name="taskDb" transaction-type="JTA">
<jta-data-source>jdbc/AppDS</jta-data-source>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="javax.persistence.schema-generation.database.action"
value="drop-and-create"/>
<property name="eclipselink.logging.level" value="FINE"/>
</properties>
</persistence-unit>

</persistence>
  1. Obtain an EntityManager in a non-managed environment (using CDI):
       @Produces public EntityManager create() {
return Persistence.createEntityManagerFactory("taskDb")
.createEntityManager();
}

public void close(@Disposes EntityManager em) {
em.close();
}
  1. Obtaining an EntityManager in a managed environment can be done like so:
        @PersistenceContext(unitName="taskDb") EntityManager em;
  1. Use the EntityManager instance within a transaction to perform the operations on an entity.
主站蜘蛛池模板: 泊头市| 汶上县| 贡嘎县| 龙胜| 老河口市| 抚远县| 温泉县| 涡阳县| 襄樊市| 唐山市| 西平县| 柳林县| 富顺县| 南昌市| 德州市| 德江县| 阿克陶县| 宜丰县| 霍城县| 荃湾区| 读书| 西乌珠穆沁旗| 顺义区| 平潭县| 玉林市| 揭西县| 台中市| 临泽县| 同仁县| 通许县| 溧阳市| 无为县| 余姚市| 阜阳市| 高阳县| 东方市| 济源市| 怀来县| 紫金县| 平遥县| 牟定县|