Что такое JPA

Содержание

Слайд 2

Что такое JPA? JPA – Java persistence API. JPA реализует концепцию ORM(object-relational mapping).

Что такое JPA?

JPA – Java persistence API.
JPA реализует концепцию ORM(object-relational mapping).

Слайд 3

Что такое Entity? Entity – POJO класс, связанный с бд с

Что такое Entity?

Entity – POJO класс, связанный с бд с

помощью аннотации или xml конфигурации.
Entity класс должен:
Должен иметь пустой конструктор.
Не может быть final, не может использовать final поля.
Должен содержать поле @Id.
Слайд 4

Что такое JPQL JPQL – Java persistence query language. Используется для написания sql-подобных запросов, оперирующих сущностями.

Что такое JPQL

JPQL – Java persistence query language. Используется для написания

sql-подобных запросов, оперирующих сущностями.
Слайд 5

Какие есть реализации JPA? -Hibernate -Toplink -Eclipselink -OpenJpa -DataNucleus -ObjectDb

Какие есть реализации JPA?

-Hibernate
-Toplink
-Eclipselink
-OpenJpa
-DataNucleus
-ObjectDb

Слайд 6

Сравнение производительности JPA библиотек

Сравнение производительности JPA библиотек

Слайд 7

Hibernate

Hibernate

Слайд 8

Configuration properties hibernate.dialect hibernate.show_sql hibernate.format_sql hibernate.default_schema hibernate.default_catalog hibernate.session_factory_name hibernate.max_fetch_depth hibernate.default_batch_fetch_size hibernate.default_entity_mode hibernate.order_updates hibernate.generate_statistics hibernate.use_identifier_rollback hibernate.use_sql_comments

Configuration properties

hibernate.dialect
hibernate.show_sql
hibernate.format_sql
hibernate.default_schema
hibernate.default_catalog
hibernate.session_factory_name
hibernate.max_fetch_depth
hibernate.default_batch_fetch_size
hibernate.default_entity_mode
hibernate.order_updates
hibernate.generate_statistics
hibernate.use_identifier_rollback
hibernate.use_sql_comments

Слайд 9

Configuration properties hibernate.jdbc.fetch_size hibernate.jdbc.batch_size hibernate.jdbc.batch_versioned_data hibernate.jdbc.factory_class hibernate.jdbc.use_scrollable_resultset hibernate.jdbc.use_streams_for_binary hibernate.jdbc.use_get_generated_keys hibernate.connection.provider_class hibernate.connection.isolation hibernate.connection.autocommit hibernate.connection.release_mode

Configuration properties

hibernate.jdbc.fetch_size
hibernate.jdbc.batch_size
hibernate.jdbc.batch_versioned_data
hibernate.jdbc.factory_class
hibernate.jdbc.use_scrollable_resultset
hibernate.jdbc.use_streams_for_binary
hibernate.jdbc.use_get_generated_keys
hibernate.connection.provider_class
hibernate.connection.isolation
hibernate.connection.autocommit
hibernate.connection.release_mode

Слайд 10

Configuration properties hibernate.cache.provider_class hibernate.cache.use_minimal_puts hibernate.cache.use_query_cache hibernate.cache.use_second_level_cache hibernate.cache.query_cache_factory hibernate.cache.region_prefix hibernate.cache.use_structured_entries

Configuration properties

hibernate.cache.provider_class
hibernate.cache.use_minimal_puts
hibernate.cache.use_query_cache
hibernate.cache.use_second_level_cache
hibernate.cache.query_cache_factory
hibernate.cache.region_prefix
hibernate.cache.use_structured_entries

Слайд 11

Configuration properties hibernate.transaction.factory_class jta.UserTransaction hibernate.transaction.manager_lookup_class hibernate.transaction.flush_before_completion hibernate.transaction.auto_close_session

Configuration properties

hibernate.transaction.factory_class
jta.UserTransaction
hibernate.transaction.manager_lookup_class
hibernate.transaction.flush_before_completion
hibernate.transaction.auto_close_session

Слайд 12

Configuration properties hibernate.current_session_context_class hibernate.query.factory_class hibernate.query.substitutions hibernate.hbm2ddl.auto hibernate.cglib.use_reflection_optimizer

Configuration properties

hibernate.current_session_context_class
hibernate.query.factory_class
hibernate.query.substitutions
hibernate.hbm2ddl.auto
hibernate.cglib.use_reflection_optimizer

Слайд 13

Dialects org.hibernate.dialect.DB2Dialect org.hibernate.dialect.DB2400Dialect org.hibernate.dialect.DB2390Dialect org.hibernate.dialect.PostgreSQLDialect org.hibernate.dialect.MySQLDialect org.hibernate.dialect.MySQLInnoDBDialect org.hibernate.dialect.MySQLMyISAMDialect org.hibernate.dialect.OracleDialect org.hibernate.dialect.Oracle9iDialect org.hibernate.dialect.Oracle10gDialect

Dialects

org.hibernate.dialect.DB2Dialect org.hibernate.dialect.DB2400Dialect
org.hibernate.dialect.DB2390Dialect org.hibernate.dialect.PostgreSQLDialect
org.hibernate.dialect.MySQLDialect org.hibernate.dialect.MySQLInnoDBDialect
org.hibernate.dialect.MySQLMyISAMDialect org.hibernate.dialect.OracleDialect
org.hibernate.dialect.Oracle9iDialect org.hibernate.dialect.Oracle10gDialect
org.hibernate.dialect.SybaseDialect org.hibernate.dialect.SybaseAnywhereDialect
org.hibernate.dialect.SQLServerDialect org.hibernate.dialect.SAPDBDialect
org.hibernate.dialect.InformixDialect org.hibernate.dialect.HSQLDialect
org.hibernate.dialect.IngresDialect org.hibernate.dialect.ProgressDialect
org.hibernate.dialect.MckoiDialect org.hibernate.dialect.InterbaseDialect
org.hibernate.dialect.PointbaseDialect

org.hibernate.dialect.FrontbaseDialect
org.hibernate.dialect.FirebirdDialect
Слайд 14

Application Configuration Самостоятельная работа

Application Configuration

Самостоятельная работа

Слайд 15

hibernate.cfg.xml "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> ? ? ? ? ? ? ? ?

hibernate.cfg.xml


"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">


?
?
?

name="connection.password">?
?
?
?
?



Слайд 16

JPA javax.persistence VS org.hibernate.annotations

JPA

javax.persistence VS org.hibernate.annotations

Слайд 17

Entities @Entity @Table @Id @GeneratedValue @Column @OneToMany @ManyToOne @ManyToMany @OneToOne

Entities

@Entity
@Table
@Id
@GeneratedValue
@Column
@OneToMany
@ManyToOne
@ManyToMany
@OneToOne

Слайд 18

Entity states

Entity states

Слайд 19

Methods of session persist, save update, merge delete load, get evict

Methods of session

persist, save
update, merge
delete
load, get
evict

Слайд 20

@ManyToMany @ManyToMany @JoinTable(name=”?”) @ManyToMany(mappedBy = “?”)

@ManyToMany

@ManyToMany
@JoinTable(name=”?”)
@ManyToMany(mappedBy = “?”)

Слайд 21

Cascading CascadeType: ALL DETACH MERGE PERSIST REFRESH REMOVE

Cascading

CascadeType:
ALL
DETACH
MERGE
PERSIST
REFRESH
REMOVE

Слайд 22

FetchType Eager Lazy

FetchType

Eager
Lazy

Слайд 23

Composite PK @Embeddable Serializable

Composite PK

@Embeddable
Serializable

Слайд 24

Additional annotations @Transient @OrderColumn @NamedQuery @NamedNativeQuery @Sort @OrderBy @Where

Additional annotations

@Transient
@OrderColumn
@NamedQuery
@NamedNativeQuery
@Sort
@OrderBy
@Where

Слайд 25

Inheritance Single table Joined Table-per-cpass

Inheritance

Single table
Joined
Table-per-cpass

Слайд 26

Single table(table per hierarchy) Parent: @Inheritance(strategy = InheritanceType.SINGLE_TABLE) @DiscriminatorColumn(name = "?",discriminatorType = DiscriminatorType.?) Child: @DiscriminatorValue("dog")

Single table(table per hierarchy)

Parent:
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "?",discriminatorType = DiscriminatorType.?)
Child:
@DiscriminatorValue("dog")

Слайд 27

Table per class(table per concrete class) Parent: @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) Child: @AttributeOverrides({ @AttributeOverride(name="?", column=@Column(name="?")) })

Table per class(table per concrete class)

Parent:
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
Child:
@AttributeOverrides({
@AttributeOverride(name="?", column=@Column(name="?"))
})

Слайд 28

Table per subclass, Joined Parent: @Inheritance(strategy = InheritanceType.JOINED) Child: @PrimaryKeyJoinColumn(name = "?", referencedColumnName = "?")

Table per subclass, Joined

Parent:
@Inheritance(strategy = InheritanceType.JOINED)
Child:
@PrimaryKeyJoinColumn(name = "?", referencedColumnName = "?")

Слайд 29

Isolation levels Read uncommited(Dirty read, Non repeatable read, Phantom read) Read

Isolation levels

Read uncommited(Dirty read, Non repeatable read, Phantom read)
Read commited(Non repeatable

read, Phantom read)
Repeatable Read(Phantom read)
Serializable
Слайд 30

Isolation levels session.doWork(connection -> { connection.setTransactionIsolation(Connection.?); });

Isolation levels

session.doWork(connection -> {
connection.setTransactionIsolation(Connection.?);
});

Слайд 31

Optimistic vs pessimistic locking @Version where version = ?

Optimistic vs pessimistic locking

@Version
where version = ?

Слайд 32

Caching Level 1 (session) Level 2 (session factory)

Caching

Level 1 (session)
Level 2 (session factory)

Слайд 33

Level 2 caching EHCache Infinispan OSCache SwarmCache Modes: NORMAL, GET, PUT

Level 2 caching

EHCache
Infinispan
OSCache
SwarmCache
Modes:
NORMAL, GET, PUT

Слайд 34

Level 2 caching, EHCache POM.xml: org.hibernate hibernate-ehcache ? hibernate.cfg.xml: true org.hibernate.cache.EhCacheProvider org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory cache-config.xml cache-config.xml:

Level 2 caching, EHCache

POM.xml:

org.hibernate
hibernate-ehcache
?

hibernate.cfg.xml:
true
org.hibernate.cache.EhCacheProvider
org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory
cache-config.xml
cache-config.xml:

version="1.0" encoding="UTF-8"?>



Слайд 35

HQL from ? alias where ____ select alias.? from ? from

HQL

from ? alias where ____
select alias.? from ?
from ? alias where

param > :paramIdentifier .setParameter("paramIdentifier", ?)
from ? x inner join fetch x.? as ?
Слайд 36

Named queries @NamedQuery(name = "?", query="?") session.getNamedQuery(“?”)

Named queries

@NamedQuery(name = "?", query="?")
session.getNamedQuery(“?”)

Слайд 37

Pagination query.setFirstResult query.setMaxResults

Pagination

query.setFirstResult
query.setMaxResults

Слайд 38

Query -> list iterate uniqueResult

Query ->

list
iterate
uniqueResult

Слайд 39

Criteria api session.createCriteria(Entity.class) .add(Restrictions.?) .addOrder(Order.?) .setProjections(Projections.?)

Criteria api

session.createCriteria(Entity.class)
.add(Restrictions.?)
.addOrder(Order.?)
.setProjections(Projections.?)