2010-09-07 12 views
5

Wyobraź sobie stół EMP:Optymalizacja zapytania JPA przez unikanie JOIN do tabeli odnośników?

CREATE TABLE emp 
(id   NUMBER 
, name   VARCHAR 
, dept_code VARCHAR 
) 

i stół dept:

CREATE TABLE dept 
(code   VARCHAR 
, name   VARCHAR 
) 

emp.dept_code referencje dept.code jak ForeignKey.

Tabele te są przypisane do podmiotów WZP i ForeignKey jest modelowany jako stowarzyszenie:

@ManyToOne 
@JoinColumn(name = "dept_code") 
private Department department; 

Biorąc pod uwagę następujące dane:

emp      dept  
----------------  ------------------ 
1 John SALS  SALS  Sales 
2 Louis SALS  SUPT  Support 
3 Jack SUPT 
4 Lucy SUPT 

chciałbym napisać zapytanie WZP zwracającej wszystko Pracownicy w dziale wsparcia. Zakładamy wiem PrimaryKey Departamentu Wsparcia (SUPT)

myślę, że byłoby:

SELECT emp 
    FROM Employee emp JOIN emp.department dept 
WHERE dept.code = 'SUPT' 

Pytanie:

jako klucz kod departamentu SUPT jest dostępny w emp tabela, czy istnieje sposób na przepisanie zapytania JPA przez uniknięcie DOŁĄCZ do jednostki wydziałowej?

Czy spowodowałoby to poprawę wydajności? Czy też implementacja JPA (np. Hibernate) jest wystarczająco inteligentna, aby uniknąć dołączenia bazy danych do tabeli dept?

Odpowiedz

3

Będziesz zwykle napisać kwerendę jako

select emp 
from employee emp 
where emp.department.code = 'SUPT' 

i niech Twój dostawca zorientować się w najlepszy sposób, aby wymyślić wyniku. W przypadku hibernacji, tak, jest wystarczająco sprytny, aby zdać sobie sprawę, że może po prostu spojrzeć na kolumnę łączenia.

edytuj: Warto zauważyć, że nie ustawiłeś leniwego ładowania w swoich adnotacjach, więc dołączysz do stołu, aby utworzyć jednostkę działu, tak czy inaczej :)

Powiązane problemy