2010-08-06 30 views
7

Estoy mapeando un conjunto de atributos en mi entidad utilizando @CollectionOfElements. El objetivo aquí es poder proporcionar una lista de metadatos que se pueda usar en una consulta para extraer entradas específicas.Hibernate Valores nulos para @CollectionOfElements

He descubierto la asignación y cómo ejecutar las consultas que quiero. ¡El problema es que hibernate no persistirá en valores nulos!


    @CollectionOfElements() 
    @JoinTable(name = "plan_attribute", joinColumns = @JoinColumn(name = "plan_id")) 
    @MapKey(columns = @Column(name = "attribute_name", nullable = false, length = 255)) 
    @Column(name = "attribute_value", nullable = true, length = 255) 
    public Map getAttributes() { 
     return attributes; 
    } 

    public void setAttributes(Map attributes) { 
     this.attributes = attributes; 
    } 

    public void addAttribute(String name, String value) { 
     this.attributes.put(name, value); 
    } 

Eg. object.addAttribute ("someName", null); no se conservará

¿Alguien tiene alguna idea sobre cómo lograr esto sin implementar una entidad par de clave/valor con el único propósito de conservar estos valores?

Saludos,

+4

¿Qué versión de Hibernate estás usando? Me pregunto si esto podría estar relacionado con [HHH-772] (http://opensource.atlassian.com/projects/hibernate/browse/HHH-772). –

+0

Hibernate 3.3.2.GA, entonces sí, parece que se aplica el error. Pude solucionar el problema al establecer explícitamente valores nulos como un carácter '*' que en realidad funciona bastante bien y se ajusta mejor que 'nulo' para mis casos de uso. – bcowdery

+0

Dado que se resuelve el problema, sería una buena idea responder a su propia pregunta y marcarla como la respuesta aceptada. – Zabba

Respuesta

2

citando de los comentarios OP:

Hibernate 3.3.2.GA, así que sí - se ve como aplica ese error. Pude solucionar el problema explícitamente estableciendo valores nulos como un carácter '*' que en realidad funciona bastante bien y encaja mejor que 'nulo' para mis casos de uso .

Esta respuesta debería quitar esto de la lista de preguntas sin respuesta hasta que se realice una votación cercana.