J'ai un peu de mal avec un problème particulier avec JPA/Spring:
Comment puis-je affecter dynamiquement un schéma à une entité?
Nous avons TABLE1 qui appartient au schéma AD et TABLE2 qui est sous BD.
@Entity
@Table(name = "TABLE1", schema="S1D")
...
@Entity
@Table(name = "TABLE2", schema="S2D")
...
Les schémas peuvent ne pas être codés en dur dans un attribut d'annotation car cela dépend de l'environnement (Dev/Acc/Prd). (En acceptation, les schémas sont S1A et S2A)
Comment puis-je atteindre cet objectif? Est-il possible de spécifier une sorte d'espace réservé comme ceci:
@Entity
@Table(name = "TABLE1", schema="${schema1}")
...
@Entity
@Table(name = "TABLE2", schema="${schema2}")
...
afin que les schémas soient remplacés en fonction d'un fichier de propriétés résidant dans l'environnement?
À votre santé
J'ai eu le même problème que j'ai résolu avec un persistence.xml dans lequel je me réfère aux fichiers orm.xml nécessaires dans j'ai déclaré le 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>
vous pouvez maintenant créer une EntityManagerFactory pour votre schéma spécial
EntityManagerFactory emf = Persistence.createEntityManagerFactory("schemaOne");
Une chose que vous pouvez faire si vous savez au déploiement est d'avoir 2 fichiers orm.xml. Un pour schema1 et un pour schema2, puis dans le persistence.xml, vous avez défini 2 unités de persistance. Mettre des annotations est un anti-modèle si vous avez besoin de changer des choses comme le schéma
Essayez de suivre:
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)
...
lorsque vous créez une source de données, vous pouvez peut-être initialiser la connexion pour utiliser un schéma différent
par exemple. pour weblogic
Spécifiez le schéma par défaut pour le pool JDBC dans weblogic/Oracle
Vous pouvez avoir deux déclarations DataSource (une pour chaque schéma) dans votre context.xml et définir deux unités de persistance à l'aide de ces sources de données. Le context.xml peut alors être différent sur les serveurs d'applications des différents environnements.
Les arguments d'annotation doivent être définitifs et ne peuvent donc pas être modifiés au moment de l'exécution.