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


Презентация изнутри:

Слайд 0

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


Слайд 1

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


Слайд 2

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


Слайд 3

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


Слайд 4

Named SQL запрос 5


Слайд 5

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


Слайд 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


Слайд 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


Слайд 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


Слайд 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


Слайд 10

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


Слайд 11

Lifecycle Callbacks 12


Слайд 12

13


Слайд 13

14


Слайд 14

15


Слайд 15

16


Слайд 16

17


Слайд 17

18


Слайд 18

19


Слайд 19

20


Слайд 20

21


Слайд 21

22


Слайд 22

23


Слайд 23

24


Слайд 24

25


Слайд 25

26


Слайд 26

27


Слайд 27

28


Слайд 28

29


Слайд 29

30


Слайд 30

31


Слайд 31

32


Слайд 32

33


Слайд 33

34


Слайд 34

35


Слайд 35

36


Слайд 36

37


Слайд 37

38


Слайд 38

39


Слайд 39

40


Слайд 40

41


Слайд 41

42


Слайд 42

43


Слайд 43

44


Слайд 44

45


Слайд 45

46


Слайд 46

47


Слайд 47

48


Слайд 48

49


Слайд 49

50


×

HTML:





Ссылка: