2010-03-08 10 views
7

मैप करने के लिए कैसे मैं एक रंग Enumहाइबरनेट - एक EnumSet

public enum color { GREEN, WHITE, RED } 

है और मैं MyEntity जिसमें वह शामिल है।

public class MyEntity { 
    private Set<Color> colors; 
    ... 

मैं पहले से ही एक प्रयोक्ता प्रकार मेरी Enums मैप करने के लिए किया है।
क्या आप जानते हैं कि Hibernate hbm.xml में Enum के सेट को कैसे मैप करना है?
क्या मुझे उपयोगकर्ता टाइप की आवश्यकता है या कोई आसान तरीका है?
धन्यवाद

संपादित करें: बस टिप्पणी करने के लिए, मैं hbm.xml विन्यास नहीं @CollectionOfElements एनोटेशन

+0

संबंधित: http://stackoverflow.com/questions/2199399/storing-enumset-in-a-डेटा –

+0

डुप्लिकेट प्रश्न: http://stackoverflow.com/questions/2233943/persisting-a-set-of- दिन के हफ्ते –

+1

डुप्लिकेट ?! मैं hbm.xml विन्यास की तलाश में हूं। मुझे पहले से ही पता है कि एनोटेशन के साथ इसे कैसे प्राप्त किया जाए, लेकिन मुझे आपकी प्रतिक्रिया के लिए – mickthompson

उत्तर

7

मैं EnumSet mapping धागे से समाधान का उपयोग करता हूं जो <element column> के उपयोग पर निर्भर करता है। संग्रह को मैप करने के लिए आपको बस एक आईडी और स्ट्रिंग के साथ एक टेबल की आवश्यकता है (MYENTITY_COLOR यहां)।

<?xml version="1.0"?> 
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
<hibernate-mapping> 
    <typedef name="color" class="com.stackoverflow.q2402869.EnumUserType"> 
     <param name="enumClassName">com.stackoverflow.q2402869.Color</param> 
    </typedef> 
    <class name="com.stackoverflow.q2402869.MyEntity" entity-name="MyEntity" table="MYENTITY"> 
     <id name="id" type="java.lang.Long"> 
      <column name="ID" /> 
      <generator class="assigned" /> 
     </id> 
     <set name="colors" table="MYENTITY_COLORS"> 
      <key column="ID" not-null="true"/> 
      <element type="color" column="COLOR"/> 
     </set> 
    </class> 
</hibernate-mapping> 

क्वेरी इस प्रकार दिखाई देंगे:

select distinct e from MyEntity e join e.colors colors where colors IN ('WHITE', 'GREEN') 

पूरे समाधान काम करता है लोड के लिए अच्छी तरह से, बचत होती है और प्रश्नों (और मानचित्रण कि तरह लग रहा है (EnumUserTypeJava 5 EnumUserType से एक है) जेसनब को क्रेडिट)।

+0

प्राप्त करने का कोई आसान तरीका है धन्यवाद .. यह ऑनलाइन समाधान ढूंढना आसान नहीं था – mickthompson

2

ऐसा लगता है आप @CollectionOfElements एनोटेशन उपयोग करने की आवश्यकता के लिए देख रहा हूँ। दस्तावेज़ http://docs.jboss.org/hibernate/stable/annotations/reference/en/html_single/#entity-hibspec-collection-extratype पर है, अध्याय '2.4.6.2.5। तत्व या समग्र तत्वों का संग्रह '। उदाहरण भी एनम के सेट को मानचित्र करता है।

+0

की आवश्यकता नहीं है। असल में मैं अपने जावा कक्षाओं को मैप करने के लिए एक्सएमएल का उपयोग कर रहा हूं और मुझे आश्चर्य है कि – mickthompson