¿Cómo puedo asignar este polimorfismo en Hibernate, utilizando XML, sin crear tablas padre de más?

StackOverflow https://stackoverflow.com/questions/4520988

Pregunta

Estoy tratando de trazar un árbol de POJOs en Hibernate para que pueda (a) UUID uso concisa de las claves principales de todo el mundo y (b) imponer externamente configuración como las relaciones entre tablas no relacionadas. Esto parece un gran trabajo utilizando anotaciones, pero para la vida de mí no puedo conseguir que funcione de la misma manera mediante la asignación de HBM XML.

Por ejemplo, dadas las clases siguientes (abreviado):

@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class Unique {
    private String uuid;
}

@Entity
public class Relationship extends Unique {
    @OneToMany
    private Set<Unique> members;
}

@Entity
public class Activity extends Unique {
    private String name;
}

@Entity
public class AssociatedXML extends Unique {
    @Lob
    private String xml;
}

... peasy fácil. Cuando corro hbm2ddl que crea las tablas Relationship, Relationship_Unique, Activity y AssociatedXML. Preguntas como las siguientes HQL parecen gran trabajo:

session.createQuery("select xml "
    + "from AssociatedXML as xml, Relationship as rel "
    + "left join rel.members as m "
    + "where m.uuid = :uuid").setString("uuid", activity.getUuid());

Mientras tanto, estoy tratando de pasar a la configuración de XML. Los POJOs se generan a partir de un esquema XML. Dado que se genera la fuente, que estoy tratando de evitarlo para agregar las anotaciones de edición de la mano.

He intentado cada configuración XML que puedo pensar (así como engañar con la salida de <hbm2hbmxml/> en las herramientas de Hibernate). No puedo llegar a una configuración que no o bien crear una tabla Unique matriz adicional que implica un extra de unirse a, o fallar en la fábrica sesión con el error:

Asociación hace referencia a la clase sin asignar: Unique

¿Alguien tiene una sugerencia en cuanto a lo que mis archivos de configuración XML debe ser similar? O voy por mal camino?

¿Fue útil?

Solución

Es algo como esto:

<class name="Unique" abstract = "true">
    <id name="uuid" />

    <union-subclass name="Relationship">
        <set name="members" table = "Relationship_Unique" >
            <key />
            <many-to-many class = "Unique" unique="true"/>
        </set>
    </union-subclass>

    <union-subclass name="Activity">
        <property name = "name" />
    </union-subclass>

    <union-subclass name="AssociaXML">
        <property name = "xml" />
    </union-subclass>
</class>

Ver también:

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top