Définir le schéma par défaut = quelque CHOSE dans oracle à l'aide de Printemps de Démarrage et Spring JDBC
Je suis en train de collaborer avec oracle et spring jdbc, mais je ne veux pas utiliser le schéma dans mon sql:
Exemple: Select * from SCHÉMA.tableau
Est-il possible de définir le schéma par défaut dans l'application.propriétés ou de l'application.yml?
Peut-être que vous pourriez partager votre configuration actuelle.
OriginalL'auteur Jose Diaz Diaz | 2016-06-22
Vous devez vous connecter pour publier un commentaire.
En supposant que vous définissez vos connexions de base de données à l'aide de printemps sources de données, vous pouvez définir le schéma par défaut lors de la définition de la source de données de configuration:
Vous pouvez trouver plus d'infos ici: Printemps De Démarrage Guide De Référence. Annexe A. Commun des propriétés de l'application
Après avoir fait quelques recherches, on dirait que le pilote Oracle ne permet pas de définir un schéma par défaut pour fonctionner avec, comme indiqué ici:
Le Schéma par défaut dans Oracle URL de Connexion
De ce poste, vous avez deux options:
Exécuter cette instruction avant l'exécution de vos déclarations:
Créer des synonymes pour vos tables/vues/etc (que je trouve vraiment lourd, si nous parlons de beaucoup d'éléments dans votre base de données).
Je voudrais des conseils à l'aide de la première option. De ce que je vois, le Printemps de démarrage n'offre pas un moyen simple d'exécuter une instruction lors de la récupération de la connexion, de sorte que le meilleur pari est d'utiliser un aspect autour de la
getConnection
de la méthode (ou la méthode qui récupère la connexion de la source de données) et exécutez l'instruction.De votre commentaire, un moyen plus facile à résoudre, à l'aide d'un script dans
spring.datasource.schema
:Et puis un fichier squema.sql avec les éléments suivants:
réponse de mise à jour.
- Je configurer mon projet à l'aide de ces propriétés: spring.datasource.url=jdbc:oracle:thin:@server:1521:orcl printemps.source de données.chauffeur-classe-nom=oracle.jdbc.le pilote.OracleDriver printemps.source de données.nom d'utilisateur=luchito printemps.source de données.mot de passe=(funca printemps.source de données.schema=schéma.sql et mon schéma.sql alter session set current_schema=CELTIC_PA
Cela ne fonctionne pas si vous utilisez un pool de connexions depuis le script est exécuté avec une seule connexion, alors que vous souhaitez exécuter sur toutes les connexions.
J'ai résolu ce problème en utilisant une propriété spécifique de la relation piscine, je suis en utilisant: le printemps.source de données.hikari.connexion-init-sql=ALTER SESSION... j'ai vu que des propriétés similaires existent également pour d'autres pools de connexion
OriginalL'auteur Luiggi Mendoza
Au printemps de démarrage, j'ai trouvé une autre manière de faire,
Il y a une propriété de configuration pour définir cette valeur aujourd'hui: le printemps.source de données.tomcat.init-s-q-l
Ayant le même problème. Tout d'abord, Hibernate a été se plaindre que la DB connexion a été fermée (la Connexion.close()), corrigé par l'utilisation de la testOnBorrow=vrai, mais maintenant, c', une fois la première connexion meurt, le second n'a pas de schéma de base de données défini, même lorsque j'ai utilisé hibernate.default_schema option. Est-ce un bug ou quelque chose?
OriginalL'auteur Deepak
J'ai trouvé un autre moyen de contourner ce problème en mettant à jour la classe d'entité avec
Êtes-vous à l'aide de réels le nom du schéma au lieu de "SCHEMA_NAME" ?
Non.. je ne suis pas cet homme stupide.. il ne marche pas si nous utilisons tomcat
Pouvez-vous s'il vous plaît poster trace de la pile complète de l'erreur que vous voyez.
OriginalL'auteur Rakesh Mothukuri
De la connexion à la base de données en votre qualité d'utilisateur, vous pouvez créer un déclencheur qui va changer le schéma à chaque fois que vous vous connectez:
OriginalL'auteur Jean de Lavarene
J'ai eu des problèmes avec le actuellement accepté de répondre; plus précisément, le schéma ne serait changé à partir de la connexion initiale. Si votre application utilise un pool de connexion, vous devez configurer la piscine pour appliquer SQL pour chaque connexion.
Par exemple, à l'aide de la valeur par défaut jdbc piscine au Printemps de Démarrage 1.5.x (Tomcat):
OriginalL'auteur Michael R
Une autre option est de créer une source de données wrapper. Créer la source de données comme d'habitude et puis créer le wrapper qui transfère toutes les méthodes à l'exception de la getConnection méthodes. Pour ceux que j'ai juste ajouté SQL pour définir le schéma. Nous avons plusieurs sources de données et cela nous a permis de spécifier un schéma différent pour chaque source de données. Si quelqu'un sait si il y a un problème avec cela, j'aimerais des commentaires. Ou si il existe une alternative qui utilise les propriétés.
OriginalL'auteur David Bradley