2012-06-11 8 views
6

मैं दो संस्थाओं ए और बीहाइबरनेट @JoinFormula

public class A{ 

    @Id 
    @GeneratedValue 
    private Integer id; 

    private String uuid; 

    ... 
    } 

UUID बाहर से दिया जाता है है; आईडी संस्करण के रूप में देखा जा सकता है।

अब, मैं बी में एक संदर्भ के लिए मैं UUID बी में संग्रहीत और स्वचालित रूप से अनुसार UUID और उच्चतम आईडी वाला चयन है ऐसी है कि चाहते हैं।

मैं क्या करने की कोशिश की है:

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; 

     ...   
} 

यह एक स्तंभ बी में एक की आईडी युक्त पैदा करेगा और एक अपवाद फेंकता है तो मैं एक वस्तु जारी रहती है की कोशिश करो। मैंने भाग्य के बिना @JoinColumnsOrFormulas भी कोशिश की है।

क्या कोई मुझे यह कैसे करना है (हाइबरनेट 3.5 बीटीडब्ल्यू में) पर संकेत दे सकता है?

धन्यवाद!

उत्तर

9

निम्नलिखित काम करता है:

@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

इसे स्वीकार ताकि लोगों को देख सकते हैं कि यह काम करता है। – ssedano

+3

हाँ। यह स्वीकार किया जाता है। लेकिन क्या यह उम्मीद है? यह कैसे उच्चतम आईडी चुनता है? –