JPA - EclipseLink - Comment changer le schéma par défaut
Je suis de la programmation d'une application web à l'aide de weblogic et oracle.
la source de données est configurée via JNDI, limitée à un utilisateur de base de données qui peut DML dans les tables, mais ne peut pas le DDL. Comme vous pouvez le deviner, que l'utilisateur n'en est pas propriétaire de ces tables, mais il est autorisé à accéder.
Disons qu'il est GUEST_USER
L'application utilise JPA + EclipseLink, et avoir beaucoup d'entités qui sont déjà définis. Je ne veux pas écrire dans chaque une de chaque entité de la classe de l'attribut à modifier le schéma.
J'ai essayé un SessionCustomizer, avec ce code.
public class MyCustomizer implements SessionCustomizer{
@Override
public void customize(Session session) throws Exception {
session.executeNonSelectingSQL("ALTER SESSION SET CURRENT_SCHEMA = OWNERS_SCHEMA");
}
}
Il semble qu'il y a quelque chose uninitiallized, j'obtiens une exception de pointeur null, je ne suis même pas sûr si c'est la façon de modifier le schéma pour les connexions avant de servir.
Aucun des échantillons ou des idées?
Merci d'avance pour votre aide!
source d'informationauteur mrzmont
Vous devez vous connecter pour publier un commentaire.
Si toutes les entités utilisent le même schéma, vous pouvez utiliser un fichier de mappage xml pour définir un schéma par défaut.
Quelque chose comme cela devrait fonctionner (l'exemple est de JPA 2.0, changer la schemaLocation pour 1,0)
orm.xml:
persistence.xml:
Vous pouvez le faire par programmation. Vous pouvez configurer le schéma par défaut de la valeur pour chaque session.
Puis définissez la session de personnalisation de l'entité gestionnaire de l'usine propriétés:
par exemple
- Je utiliser EJB droit avant d'interroger la base de données, en utilisant Les intercepteurs je suis en mesure de définir le schéma dans l'EJB contexte par la recherche de l'actuel utilisateur authentifié.
Puis quand je créer le gestionnaire d'entité, je peux mettre le bon schéma. De cette manière, en ne précisant pas le schéma avant le nom de la table, PostgreSQL va regarder le
search_path
pour déterminer quel schéma de requête.Puis lorsque vous générez le gestionnaire d'entités, vous pouvez définir le schéma que vous souhaitez.