jpa ट्यूटोरियल
शुरुआत जेपा से की
खोज…
टिप्पणियों
जेपीए जावा पर्सिस्टेंस एपीआई है, एक विनिर्देश जो जावा ऑब्जेक्ट्स की मैपिंग और एक रिलेशनल डेटाबेस के लिए उनके रिश्तों को संभालता है। इसे ऑब्जेक्ट-रिलेशनल मैपर (ORM) कहा जाता है। यह अधिक निम्न-स्तरीय JDBC के लिए (या पूरक के लिए) एक विकल्प है। जावा-उन्मुख दृष्टिकोण का पीछा करते समय यह सबसे उपयोगी है और जब जटिल ऑब्जेक्ट ग्राफ़ को बनाए रखने की आवश्यकता होती है।
जेपीए अपने आप में एक कार्यान्वयन नहीं है। आपको उसके लिए एक दृढ़ता प्रदाता की आवश्यकता होगी (उदाहरण देखें)। नवीनतम JPA 2.1 मानक का वर्तमान कार्यान्वयन EclipseLink (JPA 2.1 के लिए संदर्भ कार्यान्वयन भी है, जिसका अर्थ है कि "प्रमाण को लागू किया जा सकता है"); हाइबरनेट , और डेटान्यूक्लियस ।
मेटाडाटा
जावा वस्तुओं और डेटाबेस तालिकाओं के बीच मानचित्रण को दृढ़ता मेटाडेटा के माध्यम से परिभाषित किया गया है। JPA प्रदाता सही मेटाडेटा कार्रवाई करने के लिए दृढ़ता मेटाडेटा जानकारी का उपयोग करेगा। JPA आमतौर पर जावा वर्ग में एनोटेशन के माध्यम से मेटाडेटा को परिभाषित करता है।
ऑब्जेक्ट-रिलेशनल एंटिटी आर्किटेक्चर
इकाई वास्तुकला से बना है:
- संस्थाओं
- दृढ़ता इकाइयाँ
- दृढ़ता संदर्भों
- इकाई प्रबंधक कारखाने
- इकाई प्रबंधक
संस्करण
स्थापना या सेटअप
कक्षा की आवश्यकताएं
Eclipselink
Eclipselink और JPA API को शामिल करने की आवश्यकता है। उदाहरण मावेन निर्भरता:
<dependencies>
<dependency>
<groupId>org.eclipse.persistence</groupId>
<artifactId>eclipselink</artifactId>
<version>2.6.3</version>
</dependency>
<dependency>
<groupId>org.eclipse.persistence</groupId>
<artifactId>javax.persistence</artifactId>
<version>2.1.1</version>
</dependency>
<!-- ... -->
</dependencies>
हाइबरनेट
हाइबरनेट-कोर की आवश्यकता है। उदाहरण मावेन निर्भरता:
<dependencies>
<dependency>
<!-- requires Java8! -->
<!-- as of 5.2, hibernate-entitymanager is merged into hibernate-core -->
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.2.1.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate.javax.persistence</groupId>
<artifactId>hibernate-jpa-2.1-api</artifactId>
<version>1.0.0</version>
</dependency>
<!-- ... -->
</dependencies>
DataNucleus
डाटैन्यूक्लियस-कोर, डाटैन्यूक्लियस-एपी-जेपीए और डाटैन्यूक्लियस-आरडीबीएम (जब आरडीबीएमएस डाटासोर्स का उपयोग करते हैं) की आवश्यकता होती है। उदाहरण मावेन निर्भरता:
<dependencies>
<dependency>
<groupId>org.datanucleus</groupId>
<artifactId>datanucleus-core</artifactId>
<version>5.0.0-release</version>
</dependency>
<dependency>
<groupId>org.datanucleus</groupId>
<artifactId>datanucleus-api-jpa</artifactId>
<version>5.0.0-release</version>
</dependency>
<dependency>
<groupId>org.datanucleus</groupId>
<artifactId>datanucleus-rdbms</artifactId>
<version>5.0.0-release</version>
</dependency>
<dependency>
<groupId>org.datanucleus</groupId>
<artifactId>javax.persistence</artifactId>
<version>2.1.2</version>
</dependency>
<!-- ... -->
</dependencies>
विन्यास विवरण
जेपीए को CLASSPATH की जड़ से META-INF
तहत स्थित एक फ़ाइल persistence.xml के उपयोग की आवश्यकता होती है। इस फ़ाइल में उपलब्ध दृढ़ता इकाइयों की परिभाषा है जिसमें से JPA संचालित हो सकता है।
जेपीए अतिरिक्त रूप से META-INF
तहत रखी गई मैपिंग कॉन्फ़िगरेशन फ़ाइल orm.xml का उपयोग करने की अनुमति देता है। इस मैपिंग फ़ाइल का उपयोग यह कॉन्फ़िगर करने के लिए किया जाता है कि कक्षाओं को डेटास्टोर में कैसे मैप किया जाता है, और स्वयं जेपीए इकाई कक्षाओं में जावा एनोटेशन के उपयोग के लिए एक वैकल्पिक / पूरक है।
न्यूनतम दृढ़ता। xml उदाहरण
सीतनिद्रा में होना (और एम्बेडेड H2 DB)
<?xml version="1.0" encoding="UTF-8"?>
<persistence 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_1.xsd"
version="2.1">
<persistence-unit name="persistenceUnit">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>my.application.entities.MyEntity</class>
<properties>
<property name="javax.persistence.jdbc.driver" value="org.h2.Driver" />
<property name="javax.persistence.jdbc.url" value="jdbc:h2:data/myDB.db" />
<property name="javax.persistence.jdbc.user" value="sa" />
<!-- DDL change options -->
<property name="javax.persistence.schema-generation.database.action" value="drop-and-create"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/>
<property name="hibernate.flushMode" value="FLUSH_AUTO" />
</properties>
</persistence-unit>
</persistence>
एक्लिप्सलिंक (और एम्बेडेड H2 DB)
<?xml version="1.0" encoding="UTF-8"?>
<persistence 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_1.xsd"
version="2.1">
<persistence-unit name="persistenceUnit">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<class>my.application.entities.MyEntity</class>
<properties>
<property name="javax.persistence.jdbc.driver" value="org.h2.Driver"/>
<property name="javax.persistence.jdbc.url" value="jdbc:h2:data/myDB.db"/>
<property name="javax.persistence.jdbc.user" value="sa"/>
<!-- Schema generation : drop and create tables -->
<property name="javax.persistence.schema-generation.database.action" value="drop-and-create-tables" />
</properties>
</persistence-unit>
</persistence>
DataNucleus (और H2 DB एम्बेडेड)
<?xml version="1.0" encoding="UTF-8"?>
<persistence 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_1.xsd"
version="2.1">
<persistence-unit name="persistenceUnit">
<provider>org.datanucleus.api.jpa.PersistenceProviderImpl</provider>
<class>my.application.entities.MyEntity</class>
<properties>
<property name="javax.persistence.jdbc.driver" value="org.h2.Driver"/>
<property name="javax.persistence.jdbc.url" value="jdbc:h2:data/myDB.db"/>
<property name="javax.persistence.jdbc.user" value="sa"/>
<!-- Schema generation : drop and create tables -->
<property name="javax.persistence.schema-generation.database.action" value="drop-and-create-tables" />
</properties>
</persistence-unit>
</persistence>
नमस्ते दुनिया
आइए एक सरल हेलो वर्ल्ड बनाने के लिए सभी बुनियादी घटक देखें।
- परिभाषित करें कि जेपीए 2.1 का कौन सा कार्यान्वयन हम उपयोग करेंगे
-
persistence-unit
बनाने वाले डेटाबेस से कनेक्शन का निर्माण करें - संस्थाओं को लागू करता है
- संस्थाओं में हेरफेर के लिए इम्प्लीमेंटेशन डीएओ (डेटा एक्सेस ऑब्जेक्ट)
- आवेदन का परीक्षण करें
पुस्तकालय
मावेन का उपयोग करते हुए, हमें इस निर्भरता की आवश्यकता है:
<dependencies>
<!-- JPA is a spec, I'll use the implementation with HIBERNATE -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>5.2.6.Final</version>
</dependency>
<!-- JDBC Driver, use in memory DB -->
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.4.193</version>
</dependency>
</dependencies>
दृढ़ता इकाई
संसाधन फ़ोल्डर में हमें एक फ़ाइल बनाने की आवश्यकता होती है जिसे persistence.xml
कहा जाता persistence.xml
। इसे परिभाषित करने का सबसे आसान तरीका इस प्रकार है:
<persistence-unit name="hello-jpa-pu" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<properties>
<!-- ~ = relative to current user home directory -->
<property name="javax.persistence.jdbc.url" value="jdbc:h2:./test.db"/>
<property name="javax.persistence.jdbc.user" value=""/>
<property name="javax.persistence.jdbc.password" value=""/>
<property name="javax.persistence.jdbc.driver" value="org.h2.Driver"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/>
<property name="hibernate.show_sql" value="true"/>
<!-- This create automatically the DDL of the database's table -->
<property name="hibernate.hbm2ddl.auto" value="create-drop"/>
</properties>
</persistence-unit>
एक इकाई लागू करें
मैं एक वर्ग Biker
बनाता हूं:
package it.hello.jpa.entities;
import javax.persistence.*;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
@Entity
@Table(name = "BIKER")
public class Biker implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column(name = "bikerName")
private String name;
@Column(unique = true, updatable = false)
private String battleName;
private Boolean beard;
@Temporal(TemporalType.DATE)
private Date birthday;
@Temporal(TemporalType.TIME)
private Date registrationDate;
@Transient // --> this annotiation make the field transient only for JPA
private String criminalRecord;
public Long getId() {
return this.id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public String getBattleName() {
return battleName;
}
public void setBattleName(String battleName) {
this.battleName = battleName;
}
public Boolean getBeard() {
return this.beard;
}
public void setBeard(Boolean beard) {
this.beard = beard;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public Date getRegistrationDate() {
return registrationDate;
}
public void setRegistrationDate(Date registrationDate) {
this.registrationDate = registrationDate;
}
public String getCriminalRecord() {
return criminalRecord;
}
public void setCriminalRecord(String criminalRecord) {
this.criminalRecord = criminalRecord;
}
}
एक DAO लागू करें
package it.hello.jpa.business;
import it.hello.jpa.entities.Biker;
import javax.persistence.EntityManager;
import java.util.List;
public class MotorcycleRally {
public Biker saveBiker(Biker biker) {
EntityManager em = EntityManagerUtil.getEntityManager();
em.getTransaction().begin();
em.persist(biker);
em.getTransaction().commit();
return biker;
}
}
EntityManagerUtil
एक सिंगलटन है:
package it.hello.jpa.utils;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
public class EntityManagerUtil {
// USE THE SAME NAME IN persistence.xml!
public static final String PERSISTENCE_UNIT_NAME = "hello-jpa-pu";
private static EntityManager entityManager;
private EntityManagerUtil() {
}
public static EntityManager getEntityManager() {
if (entityManager == null) {
// the same in persistence.xml
EntityManagerFactory emFactory = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME);
return emFactory.createEntityManager();
}
return entityManager;
}
}
आवेदन का परीक्षण करें
पैकेज it.hello.jpa.test;
सार्वजनिक वर्ग TestJpa {
@Test
public void insertBiker() {
MotorcycleRally crud = new MotorcycleRally();
Biker biker = new Biker();
biker.setName("Manuel");
biker.setBeard(false);
biker = crud.saveBiker(biker);
Assert.assertEquals(biker.getId(), Long.valueOf(1L));
}
}
उत्पादन होगा:
चल रहा है। ), दाढ़ी बूलियन, जन्मदिन की तारीख, बाइकरनाम व्रचर (255), पंजीकरण समय, प्राथमिक कुंजी (आईडी)) हाइबरनेट: परिवर्तन तालिका BIKER जोड़ने के लिए बाधा UK_a64ce28nywy8wqrvfkkuapli अद्वितीय (बैटलनाम) BIKER (युद्धक) में सम्मिलित हों। , id) मान jpa-pu ...] परिणाम:
टेस्ट रन: 1, विफलताएं: 0, त्रुटियां: 0, स्किप: 0