2016-04-24 17 views
1

初めてJPAで作業しようとしています。親の値を取得する方法を混乱させます。私はSQLで作業する必要がある場合はここで 親値を取得する方法

が私のテーブル構造

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) 
) 

あり、私は今、このクエリ

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 

を使用することができ、どのように私はJPAにこれを転送することができます。名前付きクエリを使用できますが、それは問題ではありません。しかし、どのようにオブジェクトを構造化すべきですか?

は、これまでのところ、私は今ここに私は混乱しています。この

@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 

} 

を持っています。私はT2(すべての子に親フィールド)と呼ばれる別のフィールドを作成してからアノテートしますか?注釈を付ける方法カスタムクエリによってこれらのオブジェクトの値が自動的に設定されますか?

答えて

0

テーブルT1とT2のエンティティクラスも必要です。 T1EntityおよびT2Entity。

T3Entityで型T2Entityを持つメンバーを追加し、@ManyToOneに注釈を付ける:

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

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

    // getter, setter 
} 

スタートhereはこの注釈について読んします。

+0

どのようにクエリを記述しますか?私が 'T3Entity'に' T2Entity'を持っているとすれば、私は 'T3Entity.id = T2Entity.id'を使用できません。?????? –

+0

JPAジョインを使用します: 'SELECT t1、t2、t3 FROM T1Entity t1 JOIN t1.t2 t2 JOIN t2.t3 t3 WHERE t3.time =:time and t3.name =:name'、http://wiki.eclipseを参照してください。 .org/EclipseLink/UserGuide/JPA/Basic_JPA_Development/Querying/JPQL#FROM_Clause – wero

関連する問題