Расширенные темы


The Presentation inside:

Slide 0

Расширенные темы 1


Slide 1

SQL запросы Язык JPQL является абстракцией и «общим знаменателем» всех SQL диалектов. Очевидно, что конкретный диалект обладает бОльшими возможностями JPQL не содержит всех возможностей конкретной СУБД: Подзапросы в FROM Иерархические запросы Хранимые процедуры Оптимизация специфических SQL запросов Однако, рекомендация использовать SQL, только в случае, когда возможностей JPQL не достаточно для решения данной задачи 2


Slide 2

SQL запросы Пример. Использование native SQL (example 10-01) Дает преимущества: Сокращает код, по сравнению с традиционным JDBC Использование интерфейса Query, что делает код консистентным с остальным приложением 3


Slide 3

SQL запрос SQL запрос может быть определен статически или динамически, подобно JPQL SQL запрос не разбирается JPA провайдером, а выполняется непосредственно БД Необходимо предоставить мэпинг результатов запроса на сущность По умолчанию query engine использует O-R мэпинг сущности, чтобы понять как колонки result set мэпятся на сущность 4


Slide 4

Named SQL запрос 5


Slide 5

SQL запрос Необходимо помнить, что SQL запрос возвращает сущности, managed persistence контекстом, в котором выполняется транзакция При этом надо учитывать, что измененные данные зафиксируются в БД при commit транзакции Факт схожести обработки JPQL и SQL может быть использован для абстрагирования реального способа получения сущностей из БД для остального приложения 6


Slide 6

Мэпинг Result Set SQL выражения Не всегда наименование полей result set совпадает с полями сущности Не всегда result set возвращает информацию только об одной сущности Указать явный мэпинг можно через @SqlResultSetMapping, указав параметры и имя мэпинга Далее, native запрос выдолняется с указанием мэпинга: Query query = em.createNativeQuery( "SELECT emp_id, name, salary, manager_id, " + "dept_id, address_id FROM EMP ", "employeeResult"); 7


Slide 7

Мэпинг foreign ключей При выполнении native запроса провайдер учитывает foreign ключи для single-valued ассоциаций Провайдер делает повторный запрос и выбирает соответствующие сущности из БД Нет возможности проинициализировать collection-valued отношения native запросом SELECT emp_id, name, salary, manager_id, dept_id, address_id FROM emp START WITH manager_id IS NULL CONNECT BY PRIOR emp_id = manager_id manager_id, dept_id, address_id являются вторичными ключами, которые будут разыменованы провайдером 8


Slide 8

Мэпинг нескольких сущностей В native SQL выражении можно возвращать данные для инициализации нескольких сущностей SELECT emp_id, name, salary, manager_id, dept_id, address_id, id, street, city, state, zip FROM emp, address WHERE address_id = id Соответствующий мэпинг: @SqlResultSetMapping( name="EmployeeWithAddress", entities={@EntityResult(entityClass=Employee.class), @EntityResult(entityClass=Address.class)}) 9


Slide 9

Мэпинг алиасов колонок В случае, когда название колонки не совпадает с названием поля сущности, используется 2 подхода Использование алиасов: SELECT emp.id AS emp_id, name, salary, manager_id, dept_id, address_id, address.id, street, city, state, zip FROM emp, addressWHERE address_id = address.id Использование явного мэпинга: @SqlResultSetMapping(name="EmployeeWithAddress", entities={@EntityResult(entityClass=Employee.class, [email protected](name="id", column="EMP_ID")), @EntityResult(entityClass=Address.class)} 10


Slide 10

Мэпинг Result Set SQL выражения. Дополнительные возможности В спецификации JPA есть также поддержка мэпинга SQL запроса в случае: Когда result set частично состоит из скалярных данных, не принадлежащих сущностям Мэпинга compound первичного ключа Мэпинга иерархий 11


Slide 11

Lifecycle Callbacks 12


Slide 12

13


Slide 13

14


Slide 14

15


Slide 15

16


Slide 16

17


Slide 17

18


Slide 18

19


Slide 19

20


Slide 20

21


Slide 21

22


Slide 22

23


Slide 23

24


Slide 24

25


Slide 25

26


Slide 26

27


Slide 27

28


Slide 28

29


Slide 29

30


Slide 30

31


Slide 31

32


Slide 32

33


Slide 33

34


Slide 34

35


Slide 35

36


Slide 36

37


Slide 37

38


Slide 38

39


Slide 39

40


Slide 40

41


Slide 41

42


Slide 42

43


Slide 43

44


Slide 44

45


Slide 45

46


Slide 46

47


Slide 47

48


Slide 48

49


Slide 49

50


×

HTML:





Ссылка: