2010-09-07 8 views
5

Stellen Sie sich einen Tisch emp:JPA Abfrageoptimierung durch Vermeidung von JOIN in Lookup-Tabelle?

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

und einen Tisch dept:

CREATE TABLE dept 
(code   VARCHAR 
, name   VARCHAR 
) 

emp.dept_code Referenzen dept.code als ForeignKey.

Diese Tabellen sind auf JPA Entities zugewiesen und das ForeignKey als Verein modelliert:

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

Gegeben folgende Daten:

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

Ich möchte eine JPA-Abfrage schreiben, die alle zurückgibt Mitarbeiter in der Support-Abteilung. Es sei angenommen, ich die PrimaryKey der Support-Abteilung kennen (SUPT)

ich denke, das wäre:

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

Frage:

Als der Abteilung Schlüssel SUPT-Code ist in der verfügbar emp Tabelle, gibt es eine Möglichkeit zum Umschreiben der JPA-Abfrage durch Vermeiden der JOIN der Abteilung Entität?

Würde dies zu einer Leistungsverbesserung führen? Oder ist eine JPA-Implementierung (wie Hibernate) intelligent genug, um die Datenbankverbindung zur -Abteilung zu vermeiden?

Antwort

3

Sie würden in der Regel die Abfrage als

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

schreiben und Ihren Provider Figur lassen sich als die beste Art und Weise mit dem Ergebnis zu kommen. Im Fall des Winterschlafs, ja, es ist schlau genug zu erkennen, dass es nur die Join-Spalte betrachten kann.

edit: Es ist erwähnenswert, dass Sie faul Laden nicht in Ihren Anmerkungen einrichten, so es geht um den Tisch setzen in die Abteilung Einheit zu schaffen sowieso :)