Pregunta

Tengo la siguiente asignación de hibernación, que se debe asignar mediante la tabla por jerarquía de clase concreta:

<hibernate-mapping package='dao'>
    <meta attribute='class-description'></meta>
    <class name='PropertyDAO'>
        <id name='id' column='id_property'>
            <generator class='assigned'/>
        </id>
        <property name='address' column='address' type='string'/>
        <union-subclass name='HouseDAO' table='house'>
            <property name='noOfRooms' column='noOfRooms'/>
            <property name='totalArea' column='totalArea'/>
            <property name='price' column='price'/>
        </union-subclass>
        <union-subclass name='LandDAO' table='land'>
            <property name='area' column='area'/>
            <property name='unitPrice' column='unitPrice'/>
        </union-subclass>
    </class>
</hibernate-mapping>

Lo que significa que en la base de datos solo tengo 2 tablas:

  • casa (id_property (PK), dirección, noOfRooms, totalArea, precio)
  • land (id_property (PK), address, area, unitPrice)

Por lo que entendí, en este caso, los identificadores deben generarse explícitamente antes de llamar a .save (), así que mi pregunta es: ¿Cómo puedo crear una estrategia para la generación automática de los identificadores, de modo que los identificadores de la clase concreta forma un dominio continuo cuando se une.

¿Fue útil?

Solución 3

La solución es crear otra tabla que almacene la siguiente ID; este valor debe modificarse cada vez que un usuario quiera insertar una nueva entidad. De esta manera, el dominio es continuo

Otros consejos

En mi humilde opinión, su modelo en la base de datos es incorrecto, ya que tiene información redundante en varias tablas relacionadas.

La tabla por clase concreta es un modelo de herencia que da problemas en el tiempo de ejecución, ya que se puede tener una situación en la que se actualiza la dirección de Land pero no de House mientras que son iguales (semánticamente). Iow: descarte este modelo e introduzca tabla por subclase, de modo que tenga una tabla base de propiedades con id y dirección y dos tablas separadas con un PK que es un FK al pk de la base de propiedades, una es la casa con los campos específicos de la casa , la otra es tierra con los campos específicos de la tierra.

Eso le dará el menor número de problemas, ya que es la forma de convertir la herencia entre tipos de entidad en tablas relacionales (consulte los libros de Nijssen / Halpin sobre NIAM / ORM)

Usé lo siguiente con la subclase unida

<key column="id"/>

Esto debería hacer que las subclases usen los identificadores de la tabla de propiedades, ya que eso depende de ello. (el super) La columna hace referencia a la columna en la subclase que es una referencia ajena al super.

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