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


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

Слайд 1

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


Слайд 2

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


Слайд 3

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


Слайд 4

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


Слайд 5

Named SQL запрос 5


Слайд 6

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


Слайд 7

Мэпинг 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


Слайд 8

Мэпинг 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


Слайд 9

Мэпинг нескольких сущностей В 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


Слайд 10

Мэпинг алиасов колонок В случае, когда название колонки не совпадает с названием поля сущности, используется 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, fields=@FieldResult(name="id", column="EMP_ID")), @EntityResult(entityClass=Address.class)} 10


Слайд 11

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


Слайд 12

Lifecycle Callbacks 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

50


×

HTML:





Ссылка: