2009-06-02 20 views
12

Tengo una clase No estoy seguro de cómo hacer las anotaciones correctamente.¿Cómo puedo mapear una colección anidada, Map <Key, List <Values>>, con hibernación de anotaciones JPA?

Mi objetivo para el titular de datos :::

  • lista debe mantener el orden, no por el comparador sino por el orden natural de los elementos de la matriz. (Que puede ser una columna ndx si es útil.)
  • El titular tendrá la única referencia a los datos, por lo que Cascade all probablemente sea también aplicable.

También estoy abierto a un diseño diferente que elimina el mapa, si eso fuera por un diseño más limpio.

@Entity 
public class Holder extends DomainObject { 
    private Map<Enum,List<Element>> data; 
} 

@Entity 
public class Element extends DomainObject { 
    private long valueId; 
    private int otherData; 
} 

@Mappedsuperclass 
public class DomainObject { 
// provides id 
// optimistic locking 
// create and update date 
} 
+0

"tal que su lista se ordena en base a la disposición en el lista ", ¿puedes reformular? – wds

+0

@wds ¿eso ayuda? –

Respuesta

8

no creo que es posible con la hibernación (-core) para mapear cualquier colección de colecciones:

colecciones pueden contener casi cualquier tipo de Hibernate , incluyendo todos los tipos básicos , tipos personalizados, componentes, y, por supuesto, referencias a otras entidades .

(desde the official doc)

Aviso del casi y la omisión del tipo de colección.

Una solución: debe introducir un nuevo tipo 'entre' el titular de la colección y el elemento. Este tipo se puede asignar como una entidad o un componente y se refiere al contenido original del mapa, en este caso una lista.

Algo así como:

@Entity 
public class Holder extends DomainObject { 
    @OneToMany 
    private Map<Enum,InBetween> inBetweens; 
} 

@Entity 
public class InBetween extends DomainObject { 
    @OneToMany 
    private List<Element> elements; 
} 

@Entity 
public class Element extends DomainObject { 
    private long valueId; 
    private int otherData; 
} 

@Mappedsuperclass 
public class DomainObject { 
// provides id 
// optimistic locking 
// create and update date 
} 

El resto de la asignación depende de su situación particular, pero es bastante sencillo.

+0

esto se ve bien déjame reflexionar esto un poco –

Cuestiones relacionadas