2010-01-14 10 views
6

Estoy usando una estrategia de herencia UNIDA con la implementación EclipseLink JPA. Me he dado cuenta de que EclipseLink está agregando una columna de discriminador, nombrada por DTYPE por defecto, al esquema de la base de datos. Entiendo, ese discriminador es necesario para una estrategia de herencia de tabla, pero ¿por qué para la estrategia UNIDA?¿Por qué EclipseLink está agregando una columna discriminatoria para la estrategia de herencia unida?

EclipseLink necesita esta columna porque tengo errores después de eliminarla. ¿Se agrega esta columna por motivos de rendimiento, etc.? No estoy particularmente contento con eso, ya que desde el punto de vista del esquema de la base de datos, esta columna no es más que un desorden innecesario.

Hibernate based JPA no hace nada similar.

+0

Quizás haya cometido un error en su pregunta. Usted dice que entiende por qué si está UNIDO, pero no si está UNIDO ... – cletus

Respuesta

1

De Joined Table Inheritance:

En la herencia tabla unida, cada clase de acciones datos de la tabla raíz. Además, cada subclase define su propia tabla que agrega su estado extendido . El siguiente ejemplo muestra dos tablas , proyectar y L_PROJECT, así como dos clases, Proyecto y LargeProject:

...

la columna discriminadora es lo que determina el tipo y por lo tanto lo que se unió a la mesa utilizar, por lo que necesita una columna de discriminador en la tabla principal.

+4

Exactamente, y esto es lo que quiero entender: por qué EclipseLink está utilizando esta columna de discriminador - no es necesario, la estrategia UNIèE se basa en la asociación de teclas foráneas entre clases La especificación JPA dice que el discriminador es opcional para la estrategia UNE - Hibernate JPA no lo usa, por ejemplo - y me gustaría saber cuál es la ventaja de usarlo, como lo hace EclipseLink. –

+0

Supongo que te estás refiriendo a http://docs.jboss.org/hibernate/core/3.3/reference/en/html/inheritance.html#inheritance-tablepersubclass. ExlipseLink, creo que es solo explícito en este sentido. La columna discriminador evita el problema de hacer comprobaciones EXISTS (o similares) para encontrar la subclase adecuada. Incluso si fuera opcional, igual lo usaría. – cletus

+0

Eso tiene sentido, el discriminador seguramente hace las cosas más fáciles de implementar. ¡Gracias por tu respuesta! –

Cuestiones relacionadas