2
view-button 673
Java Persistence API haqqında

Yazı haqqında xəbər ver

Əgər yazıda qeyri etik və ya təhqir xarakerli sözlər varsa bizə xəbər verməyiniz rica olunur.

Java Persistence API haqqında

elvinhuseynov

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?

  1. 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.

  1. find(), createQuery, createNamedQuery, createNativeQuery, contains, createNamedStoredProcedureQuery, createStoredProcedureQuery
  2. getTransaction, getEntityManagerFactory, getCriteriaBuilder, getMetamodel, getDelegate
  3. createEntityGraph, getEntityGraph
  4. 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>

Elvin Huseynov

CodeX layihəsinin təsisçisi. PM

Rəylər

0 comments
Rəy yazan olmayıb
Rəy yazmaq üçün lütfən sayta Telegram hesabınızla daxil olun