2016-04-05 13 views
1

Bu senaryoda varlık X & P ile ilişkisini nasıl oluşturabilirim? ve ek açıklama kullanımı? Java: JPA Entity @OneToMany

P öğesi, 1 PT ve xs (x listesi) içerir.

@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 PTST dayalı bir filtreden ST listesi (ST & PT bağlantı tablosu) ve PV saklanan P değerlerini katılmak bıraktı.

Tablo FV, p_id, st_id, val.

örnek:

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 

beklenen çıkışı:

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 

anda ben verilerini

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 

sonra çıktı almak için sorgu altında kullanıyorum

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

herhangi bir tavsiye? teşekkür ederim.

Güncelleme:

sorgu yukarıda elle bunu (artık yerli sorgu) otomatik hale getirmek isteyen bir kirli varlık X için veri almak edilir.

Update2:

@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

Sorunuz oldukça anlaşılmaz. Lütfen [Nasıl Sorulur] bölümüne bakın (http://stackoverflow.com/help/how-to-ask). –

+0

@Nicholas soru güncellendi, tekrar öneride bulunun. teşekkür ederim. – user5917360

+0

PT ve X sınıfı tanımı nerede? –

cevap

0

Eh, ST liste PT varlık olduğu sütun isimleri dayalı bana bakıyor: ile PTST adlı bir birleşim tablosu yaratacak

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

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

İçindeki iki ID sütunu, ancak bunu, gösterdiğiniz sorguyla yaptığınız gibi bir sorgu olarak kullanamazsınız. Sanırım, PTST tablosu için bir bileşik anahtar ile bir varlık yapabilir ve sonra bir JPQL sorgusu oluşturabilirdiniz, ancak gösterdiğiniz sorgu, JPQL'de yalnızca kullanılabilir olduğunu düşündüğüm adlandırılmış parametreler kullanıyor olduğundan zaten böyle bir varlığa sahipsin.

enter image description here

+0

karışıklık için özür dilerim. Evet PT, ST'nin listesinin tersi, tersi de geçerlidir, ama fikir tükendiğim şey X.'in JPQL sorgusu, kirli bir varlık X ile veriyi almanın manuel bir yoludur. Ekstra kontroller ve ne zaman yapılması gerektiğinde başka bir sorgu veya PV'ye güncelleme. manuel sorgulama olmadan, bunu yapmak için daha iyi/otomatik bir yolu var mı?soruyu otomatik olarak veri almak veya sorguyu varlığa dönüştürmek için yeniden adlandırmalı mıyım? Tekrar teşekkürler. – user5917360

+0

im kaldırmıyor List xs from P. i 1M/etc ek açıklama kullanmak istiyorum P & List xs, böylece ORM sorgu kendisi inşa ve sonuç döndürün. Bunu yapmak için X varlık nasıl görünüyor? özellikleri, diğer varlığa karşı açıklama. – user5917360

+0

söz konusu güncellenmeyen kirli varlık X. teşekkür ederim. – user5917360