Bonjour.
Je suis en train de découvrir hibernate (hibernate-release-4.3.1.Final.jar) et je rencontre un problème lors de la sauvegarde d'un objet.
En base de données, j'ai la table CPTE_TARIF qui contient un id.
Cette table appartient à l'utilisateur CPTEADM.
L'application se connecte via l'utilisateur CPTECLI qui a les droits de lecture/insert/update/delete sur toutes les tables de CPTEADM.
Le mapping est le suivant :
Lors de la lecture d'un objet via hibernate :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 <class name="hibernate.CpteTarif" schema="CPTEADM" table="CPTE_TARIF"> <id name="tarId" type="long"> <column name="TAR_ID" precision="22" scale="0"/> <generator class="increment"/> </id> ...
le sql généré est :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 List<CpteTarif> list2 = session.createQuery("from CpteTarif").list(); ou list2 = session.createCriteria(CpteTarif.class).list();
--> on voit bien que le nom de user propriétaire est marqué devant le nom de la table. Le SQL fonctionne donc.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 select cptetarif0_.TAR_ID as TAR_ID1_0_, cptetarif0_.TAR_LIBELLE as TAR_LIBELLE2_0_, cptetarif0_.TAR_NOM_ARTICLE as TAR_NOM_ARTICLE3_0_, cptetarif0_.TAR_GROUPE_MARCHANDISE as TAR_GROUPE_MARCHAN4_0_ from CPTEADM.CPTE_TARIF cptetarif0_
Par contre, lors de la création d'un objet via le code suivant :
Le premier sql généré est :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 CpteTarif toto = new CpteTarif("libelle", "nomA", "grpM",new HashSet<CpteTarifvaleur>()); session.beginTransaction(); session.save(toto); session.getTransaction().commit();
--> on voit que le nom du user n'est pas marqué devant la table.
Code : Sélectionner tout - Visualiser dans une fenêtre à part Hibernate: select max(TAR_ID) from CPTE_TARIF
On a donc une erreur oracle "ORA-00942: Table ou vue inexistante" tout à fait normale.
Une solution serait alors de mettre des "public synonyme" sur la base, mais ce n'est pas ce qui est souhaité.
Pourquoi hibernate ne mets pas le nom du user "tout seul" lors de la recherche du max, ce qu'il fait pour toutes les autres requêtes.
Merci d'avance.
Partager