2009-08-19 28 views
23

Estoy teniendo un poco de problemas con un tema en particular mediante APP/Primavera:JPA utilizando varios esquemas de bases de datos

¿Cómo puedo asignar dinámicamente un esquema de una entidad?

Tenemos TABLE1 que pertenece al esquema AD y TABLE2 que se encuentra en BD.

@Entity 
@Table(name = "TABLE1", schema="S1D") 
... 

@Entity 
@Table(name = "TABLE2", schema="S2D") 
... 

Los esquemas no pueden ser codificados en un atributo anotación, ya que depende del entorno (Dev/Acc/Prd). (En aceptación los esquemas son S1A y S2A)

¿Cómo puedo lograr esto? ¿Es posible especificar algún tipo de marcadores de posición así:

@Entity 
@Table(name = "TABLE1", schema="${schema1}") 
... 

@Entity 
@Table(name = "TABLE2", schema="${schema2}") 
... 

por lo que los esquemas son reemplazados basado en un archivo de propiedades que residen en el medio ambiente?

Saludos

Respuesta

8

que tenían el mismo problema que resolví que con un persistence.xml en la que Me refiero a los archivos necesarios dentro orm.xml que declaró el Shema db

<persistence 
xmlns="http://java.sun.com/xml/ns/persistence" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd" 
version="2.0" > 
<persistence-unit name="schemaOne"> 
    . . . 
    <mapping-file>ormOne.xml</mapping-file> 
    . . . 
</persistence-unit> 

<persistence-unit name="schemaTwo"> 
    . . . 
    <mapping-file>ormTwo.xml</mapping-file> 
    . . . 
</persistence-unit> 
</persistence> 

ahora se puede crear un EntityManagerFactory para su especial esquema

EntityManagerFactory emf=Persistence.createEntityManagerFactory("schemaOne"); 
+0

¿qué pasa si hay una relación entre ormone y OrmTwo? –

2

Una cosa que puede hacer si usted sabe en el despliegue es tener 2 archivos orm.xml. Uno para schema1 y uno para schema2 y luego en persistence.xml tiene 2 unidades de persistencia definidas. Poner anotaciones es un antipatrón si es necesario cambiar cosas como el esquema

0

Los argumentos de la anotación deben ser definitivos y, por lo tanto, no pueden modificarse en el tiempo de ejecución.

N

1

Usted podría tener dos declaraciones de origen de datos (uno para cada esquema) en su context.xml y definir dos unidades de persistencia utilizando esta fuentes de datos. El archivo context.xml puede ser diferente en los servidores de aplicaciones de los diferentes entornos.

2

seguir los siguientes pasos:

puplic class MyClass { 
    public static final String S1D="S1D"; 
    public static final String S2D="S2D"; 
} 

@Entity 
@Table(name = "TABLE1", schema=MyClass.S1D) 
... 

@Entity 
@Table(name = "TABLE2", schema=MyClass.S2D) 
... 
Cuestiones relacionadas