Bonjour,
J'ai un objet A qui a une relation facultative many-to-one vers mon objet Compte.
Voici le mapping de l'objet Compte :
Dans mon objet A, je ne dispose que de l'identifiant du compte et pas de l'exercice. L'exercice devant être valorisé dans la relation avec l'année de la date du jour.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 <?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="fr.monEntreprise.domaine"> <class name="Compte" table="COMPTE"> <!-- Identifiant avec cles composites --> <composite-id name="id" class="CompteId"> <key-property name="identifiantCompte" column="idCompte"/> <key-property name="exercice" type="integer" column="exerciceCompte"/> </composite-id> <!-- propriété libelleCompte --> <property name="libelleCompte" column="libelle" length="35"/> </class> </hibernate-mapping>
Dans mon objet A, j'ai passé la relation de la façon suivante :
La lecture du mapping ne soulève aucune exception et lorsque j'essaye de lire les objets présents dans la table A, il a un comportement "bizzare" :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 <!-- Association unaire facultative --> <many-to-one name="compte" class="fr.monEntreprise.domaine.Compte" cascade="none"> <column name="identifiantCompte" not-null="false" /> <formula>year(sysdate)</formula> </many-to-one>
Pour commencer, il rajoute une colonne pour le formula : "year(sysdate)" alors que je ne lui ai pas demandé de charger le Compte associé à l'objet A...
Et deuxièmement, pour chaque élément trouvé dans la table A, il effectue une requete dans la table des comptes pour essayer de retrouver le compte associé à l'objet A (bonjour les perfs avec du "N+1 select").
Pourriez-vous me dire pourquoi Hibernate a un comportement différent lorsqu'une relation comporte un élément formula dans son mapping ?
Et une solution pour qu'il puisse avoir un comportement habituel avec un chargement en mode "lazy" (uniquement si on le demande) ?
Merci bcp,
F.
Partager