Java Persistence API – nədir?
Java Persistence API (JPA) Java EE və Java SE–in spesifikasiyasi olub, java obyektlərinin Relyasiya Verilənlər Bazasında saxlanılmasını təmin edir. Java-ın özü JPA realizasiyasını özünde saxlamir. Lakin, bu spesifikasiyani realize eden bir cox «open source», yaxud «open source» olmayan texnologiyalar vardır. Java obyektlerinin verilənlər bazasında saxlanmasını temin eden yegane spesifikasiya yalniz bu deyildir, Lakin son zamanların ən populyari hesab etmək olar.
JPA ilə Hibernate -in fərqi nədir?
Hibernate məlumatların saxlanılması, emal olunması və sorğulanmasi üçün ORM frameworkdur. Hibernate JPA spesifikasiyasında olan «open source» realizasiyadır. Həmçinin, Hibernate JPA spesifikasiyasında olmayan bir çox əlavə funksionallıqlarıda təmin edir.
Hibernate JDBC-ini tamamilə əvəz etmir. Hibernate JDBC vasitəsi ile Database -ə qoşulmaği təmin edir
Hibernate kimi digər framework-larında adını çəkmək olar EclipseLink, TopLink və s.
JPA –in JDBC-e nəzərən üstünlükləri
- JPA sizə DDL (data definition language) əməliyyatlarını xüsusi SQL dilində yazmağa imkan verir. Beləki, siz SQL kodlarinin əvəzinə Java annotation-larından, yaxud XML “mapping” file-larından istifadə edə bilərsiniz
- JPA sizə DML əməliyyatlarını xüsusi SQL dialektində yazmağa imkan yaradır.
- JPA java obyektlərini yükləməyə (load) ve saxlamağa imkan yaradır (heç bir SQL DML olmadan).
- JPQL vasitəsi ilə sql query-lər entity–lər vasitəsi ile realizə olunur.
Entity
Entity biznes məntiqini özündə saxlayan java obyektdir (persistent domain object) JPA Entity class-ları user tərəfindən təyin olunur ve onların instance-ları Verilənlər bazasinda saxlanılır.
Qısaca olaraq belə demek olar ki, entity Enterprise layihənin biznes modelini ifade edir.
Entity Manager
Entity Manager Java interface-dir. Bu interface Entity üzərində əsas əməliyyatlarin aparılmasını ifadə edir.
Bəs entity-lər üzərinde əsas əməliyyatlar dedikdə hansı əməliyyatları nəzərde tuturuq?
- persist (), detach(), merge (), remove (), refresh (), lock ()- entity-i digər thread-lərdə dəyişikliyə məruz qalmasının qarşısnı alır.
Həmçinin EntityManager interface asagıdaki emeliyyatlarıda ifadə edir.
- find(), createQuery, createNamedQuery, createNativeQuery, contains, createNamedStoredProcedureQuery, createStoredProcedureQuery
- getTransaction, getEntityManagerFactory, getCriteriaBuilder, getMetamodel, getDelegate
- createEntityGraph, getEntityGraph
- Bütün entity-lərə aid olan əməliyyatlar: close, isOpen, getProperties, setProperty, clear
Java Persistence XML
Entity Managerlə bir çox əməliyyatları yerinə yetirilməyini gördük. Bəs Server hansı Database-dən istifadə edəcəyimizi nə cür bilməlidir?
persistense xml faylının köməyi ilə bu məsələ həll olunur. Persistense xml bir sözle JPA-nın standard konfiqurasiya faylidir.
<?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=“TestAppPU" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>com.cybernet.model.Employee</class>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="javax.persistence.jdbc.url"
value="jdbc:mysql://localhost:3306/test_db?zeroDateTimeBehavior=convertToNull"/>
<property name="javax.persistence.jdbc.user" value="root"/>
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
<property name="javax.persistence.jdbc.password" value="123456"/>
<property name="hibernate.cache.provider_class" value="org.hibernate.cache.NoCacheProvider"/>
<property name="javax.persistence.schema-generation.database.action" value="create"/>
<property name="hibernate.hbm2ddl.auto" value="create"/>
</properties>
</persistence-unit>
</persistence>
Persistense unit EntityManager instance-I ilə idarə olunacaq toplu entity class-larını təyin edir.
Hibernate config
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<property name="connection.url">jdbc:oracle:thin:@//asanpaydb:1521/ASANWSP</property>
<property name="connection.username">username</property>
<property name="connection.password">psw</property>
<property name="connection.pool_size">10</property>
<property name="dialect">org.hibernate.dialect.OracleDialect</property>
<property name="current_session_context_class">thread</property>
<property name="show_sql">false</property>
<property name="hbm2ddl.auto">validate</property>
<mapping class="az.com.codex.ws.util.entity.log.JSONInputLogEnt"/>
</session-factory>
</hibernate-configuration>
Rəylər
0