2010-03-08 16 views
7

tengo un color EnumeraciónHibernate - cómo asignar un EnumSet

public enum color { GREEN, WHITE, RED } 

y tengo myEntity que lo contiene.

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

Ya tengo un UserType para asignar mis Enumeraciones.
¿Sabes cómo mapear un conjunto de entradas en Hibernate hbm.xml?
¿Necesito un UserType o hay una manera más fácil? Gracias

edición: Sólo para la observación, que estoy buscando no la configuración hbm.xml la anotación @CollectionOfElements

+0

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

+0

pregunta duplicada: http://stackoverflow.com/questions/2233943/persisting-a-set-of- días-de-la-semana –

+1

¿Duplicado ?! Estoy buscando la configuración hbm.xml. Ya sé cómo lograr esto con anotaciones, pero no es lo que necesito – mickthompson

Respuesta

7

Utilizo la solución del hilo EnumSet mapping que se basa en el uso de <element column>. Solo necesita una tabla con una identificación y una cadena para asignar la colección (MYENTITY_COLOR aquí). Y el mapeo parece que (el EnumUserType es el de 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> 

consulta podría tener este aspecto:

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

La solución entera trabaja bien para cargas, guarda y consulta (créditos a jasonab).

+0

muchas gracias ... no fue fácil encontrar una solución en línea – mickthompson

2

Parece que necesita para utilizar la anotación @CollectionOfElements. El documento está en http://docs.jboss.org/hibernate/stable/annotations/reference/en/html_single/#entity-hibspec-collection-extratype, capítulo '2.4.6.2.5. Colección de elementos o elementos compuestos '. El ejemplo también mapea un conjunto de Enum.

+0

Gracias por su respuesta. En realidad estoy usando XML para mapear mis clases de Java y me pregunto si hay una manera fácil de lograr el mismo – mickthompson

Cuestiones relacionadas