2016-04-05 6 views
1

エンティティを構築する方法X &このシナリオでPとの関係は?とアノテーションの使用?Java:JPAエンティティ@OneToMany

エンティティPでは、1つのPTとxs(xのリスト)があります。

@Entity 
public class P { 

    @Id @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private int id; 

    @OneToOne 
    @JoinColumn(name = "pt_id") 
    private PT pt; 

    @OneToMany 
    private List<X> xs; 

    ... 
} 

@Entity 
public class PT { 
    @Id @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private int id; 
    private String name; 
} 

XS濾過STリストPTST(ST & PTのリンクテーブル)、 に基づいてPVに格納されたPの値を結合残されます。

テーブルPVでは、p_id、st_id、valがあります。

例:

P: 
id pt_id 
1  1 
2  2 
3  1 

PT: 
id name 
1  pt-1 
2  pt-2 

ST 
id t 
1  A 
2  B 
3  C 
4  D 
5  E 

PTST 
pt_id st_id 
1  1 
1  3 
2  1 
2  2 

PV 
p_id st_id val 
1  1  1a 
2  2  2b 

予想される出力:

P = 1 
p_id st_id st_t val 
1  1  A   1a 
1  3  C   NULL 

P = 2 
p_id st_id st_t val 
2  1  A   NULL 
2  2  B   2b 

は、現在、私はデータ

select st.id as st_id, st.t, :p2 as p_id, pv.val 
      from PTST ptst 
      inner join ST st on (st.id = ptst.st_id) 
      left join PV pv on (pv.p_id = :p1 and pv.st_id = ptst.st_id) 
      where PTST.pt_id = :p3 

その後、出力を取得するには、クエリの下に使用してい

p_id: 1, st_id: 1 t: A val: 1a 
p_id: 1, st_id: 3 t: C val: NULL 

アドバイスはありますか?ありがとうございました。

更新:

上記のクエリを手動で私はそれを自動化したい汚れエンティティX(これ以上のネイティブクエリ)のデータを取得します。

アップデート2:

@Entity 
@Table(name = "PV") 
public class X{ 

    @EmbeddedId 
    private Y id = new Y(); 

    @Column(updatable = false, insertable = false) 
    private String st_t; 
    private String val; 
} 


@Embeddable 
public class Y implements Serializable { 
    @Column(updatable = false) 
    private int p_id; 
    @Column(updatable = false) 
    private int st_id; 
} 
+0

あなたの質問はかなり理解できません。 [How To Ask](http://stackoverflow.com/help/how-to-ask)を参照してください。 –

+0

@Nicholasの質問が更新されました。もう一度アドバイスしてください。ありがとうございました。 – user5917360

+0

ここで、PTとXクラスの定義は何ですか? –

答えて

0

まあ、それはSTのリストは、PTのエンティティであるカラム名に基づいて、私になります

@Entity 
public class PT { 
    @Id 
    private Integer id; 
    private String name; 

    @ManyToMany 
    @JoinTable(name="PTST") 
    List<ST> st; 

PTSTと名付けられ、結合テーブルを作成しますその2つのID列は表示されますが、表示されたクエリで行っているようにクエリとして使用することはできません。私はPTSTテーブル用の複合キーを持つエンティティを作成してからJPQLクエリを作成できると思いますが、表示されたクエリは名前付きパラメータを使用しているため、JPQLでしか使用できないと思われますあなたはすでにそのようなエンティティを持っています。

enter image description here

+0

混乱して申し訳ありません。はいPTにはSTのリストがありますが、その逆もありますが、アイデアがなくなるのはエンティティXです。JPQLクエリは、不正なエンティティXを持つデータを手動で取得する方法です。 PVへの更新。手動での照会なしで、それを行うためのより良い/自動的な方法がありますか?質問をデータの自動取得に変更するか、クエリをエンティティに変換する必要がありますか?再度、感謝します。 – user5917360

+0

私はリストから xsを削除していません.P&List xsをリンクするために1ToM/etcアノテーションを使用したいので、ORMはクエリ自体を構築して結果を返すことができます。そのためには、エンティティXの外観はどうですか?そのプロパティ、他のエンティティに対する注釈。 – user5917360

+0

問題のある不潔なエンティティXが更新されました。ありがとうございました。 – user5917360

関連する問題