2013-12-12 4 views
7

में @UniqueConstraint को परिभाषित करें मुझे एक आवश्यकता है जिसमें मेरी कई संस्थाओं को एक लंबी कीमत और किसी अन्य इकाई के साथ @ManyToOne संबंध की आवश्यकता है। इस आवश्यकता को आसानी से निम्नलिखित तरीके से एक MappedSuperclass के साथ प्राप्त किया जा सकता है:@MappedSuperclass

@MappedSuperclass 
    public class BaseEntity { 

     @Column(name = "value", nullable = false) 
     private Long value; 
     @JoinColumn(name = "some_entity_id", nullable = false) 
     @ManyToOne(fetch = FetchType.EAGER) 
     private SomeEntity some; 

समस्या यह है कि लंबे समय के मूल्य और इकाई संयोजन अद्वितीय होना चाहिए है। क्या सुपरक्लास में इंडेक्स को परिभाषित करना संभव है? अगर मैं इकाई कोड अपेक्षित ढंग से काम करता है की @Table में सूचकांक को परिभाषित

@UniqueConstraint(name = "uq1", columnNames = {"value", "some_entity_id"}) 

झटका है कि बाधा तो सभी बच्चे कक्षाओं के साथ दोहराया जा करने के लिए होता है और फिर सभी परिवर्तनों को भी अवश्य होना चाहिए कि है विरासत को लगभग बेकार छोड़कर (निश्चित रूप से सुरुचिपूर्ण नहीं)

वास्तविक प्रश्न को सारांशित करने के लिए यहां है: @MappedSuperclass से एक समग्र अद्वितीय बाधा को परिभाषित करना संभव है? अगर जवाब नहीं है तो आप क्या करेंगे?

पीएस: मुझे पता है कि यह केवल तब प्रासंगिक है जब टेबल उत्पादन प्रभावी हो, यह हमारे कोडिंग और सर्वोत्तम प्रथाओं की राजनीति का हिस्सा है।

+0

क्या होगा यदि आप बेसइन्टिटी सार बनाते हैं, गेटटर/सेटर एनोटेशन में स्विच करते हैं और एक अमूर्त विधि को परिभाषित करते हैं ID? –

उत्तर

0

मैं यह सब बाहर टाइप कर सकते हैं, या मैं बस आपको

How to use @UniqueConstraint with single table inheritance (JPA)?

संक्षेप में, आप विस्तारित कक्षाओं में @Table एनोटेशन ओवरराइड नहीं कर सकते एक समाधान :) के लिए एक लिंक दे सकता है, हालांकि, आप कर सकते हैं orm.xml फ़ाइल में अनन्य बाधाएं सेट करें (जिसे आपके persistence.xml से संदर्भित किया गया है)।

इसका मतलब है, आप एक अद्वितीय बाधा जोड़ सकते हैं जो आपके बेस क्लास को बढ़ाने वाले सभी वर्गों से विरासत में प्राप्त होगी।

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