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 :
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>
...
Lors de la lecture d'un objet via hibernate :
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();
le sql généré est :
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_
--> on voit bien que le nom de user propriétaire est marqué devant le nom de la table. Le SQL fonctionne donc.


Par contre, lors de la création d'un objet via le code suivant :
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();
Le premier sql généré est :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
Hibernate: select max(TAR_ID) from CPTE_TARIF
--> on voit que le nom du user n'est pas marqué devant la table.
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.