2016-04-24 12 views
1

Ich versuche, JPA zum ersten Mal zu arbeiten und verwirren, wie kann ich Elternwerte abrufen.So holen Sie übergeordnete Werte

Hier meine Tabellenstruktur

T1(
    id (pk), 
    name (varchar) 
) 

T2(
    id (pk), 
    t1_id (fk_t1), 
    number (int) 
) 

T3 (
    id (pk), 
    t2_id (fk_t2), 
    time (datetime) 
    zone (tinyint), 
    name (varchar) 
) 

sind Wenn ich in SQL arbeiten, habe ich diese Abfrage

select * from T3, T2, T1 
where T3.time = <given_time>, 
and T3.name = <given_name>, 
and T3.t2_id = T2.id, 
and T2.t1_id = T1.id 

Jetzt kann ich diese übertragen, wie auf eine JPA verwenden können. Ich kann die genannte Abfrage verwenden, das ist nicht das Problem. Aber wie soll ich das Objekt strukturieren?

Bisher habe ich diese

@Entity 
@Table(name="T3, schema="", catalog="dbname") 
public class T3Entity{ 
    private int id; 
    private DateTime datetime; 
    private int zone; 
    private String name; 

    @Id 
    @Column(name="id", nullable=false, insertable=true, updatable=true) 
    //GETTER/SETTERS 

    @Basic 
    @Column(name="datetime", nullable=false, insertable=true, updatable=true) 
    //GETTER/SETTERS 

    @Basic 
    @Column(name="zone", nullable=false, insertable=true, updatable=true) 
    //GETTER/SETTERS 

    @Basic 
    @Column(name="name", nullable=false, insertable=true, updatable=true) 
    //GETTER/SETTERS 

} 

Hier i bin verwirrt. Soll ich ein weiteres Feld namens T2 (übergeordnetes Feld in jedem Kind) erstellen und dann mit Anmerkungen versehen? wie beschriften? Würde die benutzerdefinierte Abfrage automatisch die Werte dieser Objekte festlegen?

Antwort

0

Sie benötigen auch Entity-Klassen für die Tabellen T1 und T2, z. T1Entity und T2Entity.

In T3Entity ein Mitglied mit Typ T2Entity hinzufügen und mit @ManyToOne Anmerkungen versehen:

public class T3Entity { 
    ...old fields... 

    @ManyToOne(fetch=FetchType.LAZY) 
    @JoinColumn(name="t2_id") 
    private T2Entity t2; 

    // getter, setter 
} 

starten here über diese Anmerkung zu lesen.

+0

Wie würde ich die Abfrage schreiben? Da ich 'T2Entity' in' T3Entity' habe, kann ich 'T3Entity.id = T2Entity.id' nicht verwenden ?????? –

+0

Sie verwenden JPA-Joins: 'SELECT t1, t2, t3 VON T1Entity t1 JOIN t1.t2 t2 JOIN t2.t3 t3 WHERE t3.time =: Zeit und t3.name =: name', siehe http: //wiki.eclipse .org/EclipseLink/UserGuide/JPA/Basic_JPA_Entwicklung/Abfrage/JPQL # FROM_Clause – wero

Verwandte Themen