2010-03-04 10 views
7

Tengo una entidad Persona mapeada por Hibernate en una tabla de base de datos en un catálogo de base de datos "Activo". Después de un período de tiempo, los registros en esta tabla de base de datos en el catálogo "Activo" se archivan/mueven a una copia exacta de la tabla en una base de datos Catálogo "Historial". Tengo la necesidad de recuperar de los catálogos de Active y History. ¿Hay alguna manera mejor de modelar esto con anotaciones de Hibernate que haciendo una clase abstracta de la que se extienden 2 clases?Hibernación Anotación para entidad existente en más de 1 catálogo

Esto es lo que tengo ahora.

@MappedSuperclass 
public abstract class Person { 

    @Id 
    private Integer id; 
    private String name; 
} 

@Entity 
@Table(name="Person", catalog="Active") 
public class PersonActive extends Person { 
} 

@Entity 
@Table(name="Person", catalog="History") 
public class PersonHistory extends Person { 
} 

Respuesta

1

Que yo sepa, que sería la forma correcta de hacerlo con anotaciones (que poco tiene dos tablas por lo que necesita dos entidades). A continuación, ejecute una consulta polimórfica en la entidad Person. Esto me parece bastante limpio por cierto.

PD: ¿Puede agregar un puntero sobre cómo hacer esto con los archivos de mapeo? Tengo mucha curiosidad.

+1

Gracias por la información. En el pasado, cuando tenía este requerimiento comercial con otros proyectos que estaba usando Spring JDBC, solo tenía un mapeador de una clase y una fila para ambas tablas. No lo he hecho antes con hibernate, pero he aquí un ejemplo http://old.nabble.com/Mapping-class-to-multiple-tables-with-entity-name-(hibernate-plugin)- to9547563.html

(...) (...)

0

Creo que hay un subproyecto de hibernación llamado shards. Está diseñado para trabajar con múltiples bases de datos relacionales. Si desea usarlo, es posible que necesite grandes cambios en su código.

0

Mi idea sería escribir una consulta para seleccionar ambas tablas de db A y B. luego crear una consulta con hibernación y asignarla a su clase.

ejemplo:

@Entity 
@NamedNativeQuery(
name="GetAllPerson", 
query="select * from A.Person inner join B.Person on A.Person.Id = B.Person.Id" 
) 
public class Person { 
... 
} 

No estoy seguro si podría funcionar, su pregunta me hizo también curioso sobre la mejor manera de hacerlo :). Lo probaré esta noche después del trabajo y veré si es bueno.

Cuestiones relacionadas