2010-03-08 13 views
7

haritaya nasıl bir Renk Enumhazırda - Bir EnumSet

public enum color { GREEN, WHITE, RED } 

ettik ve bunu içeren MyEntity var.

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

Zaten numaralamalar eşleştirmek için bir Kullanıcıtürü var.
Hazırda Bekletme hbm.xml'deki bir Set of Enums'ı nasıl eşleyeceğinizi biliyor musunuz?
UserType'a mı ihtiyacım var veya en kolay yolu var mı?
Teşekkür

düzenleme: Sadece tespite, ben hbm.xml yapılandırma değil Size @CollectionOfElements ek açıklama kullanmak gerekir gibi görünüyor @CollectionOfElements Ek Açıklama

+0

İlgili: http://stackoverflow.com/questions/2199399/storing-enumset-in-a-database –

+0

yinelenen soru: http://stackoverflow.com/questions/2233943/persisting-a-set-of- Haftalık günler –

+1

Çoğalt ?! Hbm.xml yapılandırmasını arıyorum. Ek açıklamalarla bunu nasıl başarabileceğimi zaten biliyorum ama ihtiyacım olan şey bu değil – mickthompson

cevap

7

<element column> kullanımına dayanan EnumSet mapping iş parçacığı çözümünü kullanıyorum. Sadece bir id ile bir tabloya ve koleksiyona eşleştirmek için bir dizgeye ihtiyacınız var (MYENTITY_COLOR burada).

<?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> 
Sorgu aşağıdaki gibi görünebilir

:

bütün çözüm, yükler için de çalışır kazandırır ve sorgular
select distinct e from MyEntity e join e.colors colors where colors IN ('WHITE', 'GREEN') 

(Ve haritalama benziyor (EnumUserTypeJava 5 EnumUserType den biridir) jasonab için krediler.

+0

elde etmenin kolay bir yolu olup olmadığını merak ediyorum .. çok kolay bir çözüm bulmak kolay değildi – mickthompson

İlgili konular