2010-03-08 14 views
7

Sono un colore EnumHibernate - come mappare un EnumSet

public enum color { GREEN, WHITE, RED } 

e ho MyEntity che lo contiene.

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

Ho già un UserType per mappare il mio Enum.
Sai come mappare un Set di Enum nella Hibernate hbm.xml?
Ho bisogno di un UserType o c'è un modo più semplice?
Grazie

edit: Solo per osservazione, sto cercando la configurazione di non hbm.xml il @CollectionOfElements annotazione

+0

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

+0

domanda duplicata: http://stackoverflow.com/questions/2233943/persisting-a-set-of- giorni della settimana –

+1

Duplicato ?! Sto cercando la configurazione hbm.xml. So già come ottenerlo con le annotazioni ma non è quello che mi serve – mickthompson

risposta

7

Uso la soluzione dal thread EnumSet mapping che si basa sull'utilizzo di <element column>. Hai solo bisogno di una tabella con un id e una stringa per mappare la collezione (MYENTITY_COLOR qui). E la mappatura sembra che (l'EnumUserType è quello Java 5 EnumUserType):

<?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> 

Query potrebbe essere simile a questo:

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

L'intera soluzione funziona bene per i carichi, salva e interroga (crediti a jasonab).

+0

grazie mille .. non è stato facile trovare una soluzione online – mickthompson

Problemi correlati