tablas tabla secuencia primaria mapeo mapear llave guia foranea con compuesta column clave anotacion java jpa entity

java - secuencia - JPA, ¿Cómo usar la misma clase(entidad) para mapear diferentes tablas?



mapeo de tablas (3)

Cree una clase abstracta (una clase de plantilla) con la anotación @MappedSuperclass y luego amplíela. Cada clase que se extiende usa anotaciones @table, @entity y no contiene nada más que un constructor vacío. Todo el código estará en tu clase para padres. En sus métodos use genéricos que indiquen que su entidad de parámetro se extiende desde templateClass y no se necesitan más cambios de código. Las asignaciones correctas estarán en cada hijo que pase.

Tengo dos tablas: Ta y Tb . Tienen exactamente la misma estructura de tabla pero diferentes nombres de tabla.

Intento crear una clase de entidad para mapear las estructuras de la tabla. Algunos de mis módulos de aplicación comunes usarán esta clase de entidad para consultar dinámicamente y actualizar Ta o Tb función de los parámetros. ¿Se puede hacer en JPA? ¿Cómo puedo escribir el programa para mapear dinámicamente la clase de entidad a diferentes tablas en tiempo de ejecución?


No estoy seguro de poder hacerlo exactamente como lo desea, pero puede usar la herencia para producir el mismo resultado.

AbsT tiene todos los campos pero ninguna anotación @Table

Ta y Tb heredan de AbsT y tienen una anotación @Table cada

Utilizar

@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)

en AbsT.

Código de muestra:

@Entity @Inheritance(strategy=InheritanceType.TABLE_PER_CLASS) public class abstract AbsT { @Id Long id; ... } @Entity @Table(name = "Ta") public class Ta extends AbsT { ... } @Entity @Table(name = "Tb") public class Tb extends AbsT { ... }


También puede hacer esto sin usar subclases si usa dos unidades de persistencia diferentes.

Cada unidad de persistencia puede especificar un conjunto único de asignaciones (incluido el nombre de la tabla). Una forma de lograr esto es crear dos archivos orm.xml. En persistence.xml necesitarás algo como esto:

<persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.0"> <persistence-unit name="mapping-1"> . . . <mapping-file>orm-1.xml</mapping-file> . . . </persistence-unit> <persistence-unit name="mapping-2"> . . . <mapping-file>orm-2.xml</mapping-file> . . . </persistence-unit> </persistence>

Luego dentro de orm-1.xml:

<?xml version="1.0" encoding="UTF-8"?> <entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm orm_1_0.xsd" version="1.0"> <package>mypackage</package> <entity name="myEntity" class="myClass"> <table name="TABLE1"> </table> </entity> </entity-mappings>

Y dentro de orm-2.xml:

<?xml version="1.0" encoding="UTF-8"?> <entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm orm_1_0.xsd" version="1.0"> <package>mypackage</package> <entity name="myEntity" class="myClass"> <table name="TABLE2"> </table> </entity> </entity-mappings>

Tendrá que crear una EntityManagerFactory por separado para cada PersistenceUnit (probablemente no lo que quiere), pero si quisiera usar la misma clase en diferentes bases de datos (con diferentes nombres de tabla), este sería un camino a seguir.