2012-06-11 14 views
6

I UUID'si dışarıdan verilen A ve Bhazırda @JoinFormula

public class A{ 

    @Id 
    @GeneratedValue 
    private Integer id; 

    private String uuid; 

    ... 
    } 

İki varlık vardır; ID versiyon olarak görülebilir.

Şimdi, B'de A'ya başvurmak isterim ki B'de saklanan uuid'e sahip olur ve otomatik olarak A'yı uuid ve en yüksek kimlikle seçer.

public class B{ 
     @Id 
     @GeneratedValue 
     private Integer id; 

     private String uuidOfA; 

     @ManyToOne 
     @JoinFormula(value="SELECT a.id FROM A a WHERE v.uuid = uuidOfA AND v.id = (SELECT max(x.id) FROM A x WHERE x.uuid = v.uuid)", referencedColumnName="id") 
     private A a; 

     ...   
} 

Bu B'de A'nın kimliğini içeren bir sütun oluşturur ve bir nesne devam çalışırsanız bir istisna atar: Denedim ne

olduğunu. Ayrıca şanssız @JoinColumnsOrFormulas denedim.

Birisi bana bunun nasıl yapılacağına dair bir ipucu verebilir mi (Hazırda 3.5 btw)?

Teşekkürler!

cevap

9

aşağıdaki çalışır: kişiler bu çalıştığını görebilmeniz

@ManyToOne 
@JoinColumnsOrFormulas({ 
    @JoinColumnOrFormula([email protected](value="(SELECT a.id FROM A a WHERE a.uuid = uuid)", referencedColumnName="id")), 
    @JoinColumnOrFormula(column = @JoinColumn("uuidOfA", referencedColumnName="uuid")) 
}) 
private A a; 
+0

bunu kabul edin. – ssedano

+3

Evet. Kabul edildi. Ama beklenen bu mu? Buradaki en yüksek kimlik nasıl seçilir? –

İlgili konular