2010-06-18 12 views
8

निम्न कोड का उपयोग कर:हाइबरनेट: @UniqueConstraint @ManyToOne फ़ील्ड के साथ?

@Entity 
@Table(uniqueConstraints=[@UniqueConstraint(columnNames=["account","name"])]) 
class Friend { 
    @Id @GeneratedValue(strategy=GenerationType.AUTO) 
    public Long id 
    @ManyToOne 
    public Account account 
    public String href 
    public String name 
} 

मुझे निम्न त्रुटि मिलती है:

org.hibernate.AnnotationException: Unable to create unique key constraint (account, name) on table Friend: account not found 

ऐसा लगता है कि इसे @ManyToOne बाधा के साथ करना है, जो मुझे लगता है कि वास्तव में एक अलग UniqueConstraint बनाता है ???

किसी भी मामले में, यदि मैं इसे बाहर लेता हूं, तो UniqueConstraint के बारे में कोई शिकायत नहीं है, लेकिन एक और त्रुटि है जो मुझे विश्वास दिलाती है कि इसे छोड़ दिया जाना चाहिए।

org.hibernate.MappingException: Could not determine type for: com.mksoft.fbautomate.domain.Account, at table: Friend, for columns: [org.hibernate.mapping.Column(account)] 

कोई संकेत है कि मैं कैसे बना सकता हूं ऐसी वांछित बाधा (यानी, खाते और नाम का प्रत्येक संयोजन केवल एक बार होता है ???)

धन्यवाद!

मिशा

+0

क्या @ पीटर का समाधान आपके लिए काम करता है? – Reddy

उत्तर

12

समाधान:

@Entity 
@Table(uniqueConstraints=[@UniqueConstraint(columnNames=["myaccountcolum","name"])]) 
class Friend { 
    @Id @GeneratedValue(strategy=GenerationType.AUTO) 
    public Long id 
    @ManyToOne 
    @JoinColumn(name="myaccountcolum") 
    public Account account 
    public String href 
    public String name 
} 

स्पष्टीकरण: उत्पन्न तालिका में @ManyToOne के लिए स्तंभ नाम शायद बजाय ACCOUNT_ID खाते की तरह कुछ हो जाएगा। @UniqueConstraint सटीक कॉलम नाम की अपेक्षा करता है, न कि आपके द्वारा उपयोग की जाने वाली नाम। यह सुनिश्चित करने के लिए कि यह सिर्फ काम करता है, इस कॉलम को @JoinColumn के साथ एक विशिष्ट नाम दें और सुनिश्चित करें कि आपका नाम आपके अद्वितीय कॉनस्ट्रैंट में उपयोग किया जाता है।

संबंधित मुद्दे