Bonjour,
Voila mon problème: J'ai un Usager (objet UsaUsager) qui possède plusieurs adresses postales (objet UsaAdresse). J'ai donc une table d'association UsaUsaadr entre ma table UsaUsager et ma table UsaAdresse. Un booléen usaadrPrinOn dans ma table UsaUsaadr permet de savoir quelle est l'adresse Principale. Ce que je souhaite faire, c'est récupérer la commune (BdntCommune) de l'adresse principale de l'usager directement dans mon mapping de l'objet UsaUsager. L'objet BdntCommune est associé a l'objet UsaAdresse par une relation many-to-one.
J'essaye de suivre le pattern des " mappings plus complexes" du chapitre 7.6:
http://docs.jboss.org/hibernate/stable/ ... oc-complexIn a more complex example, imagine that the association between Employee and Organization is maintained in an Employment table full of historical employment data. An association to the employee's most recent employer, the one with the most recent startDate, could be mapped in the following way:
<join>
<key column="employeeId"/>
<subselect>
select employeeId, orgId
from Employments
group by orgId
having startDate = max(startDate)
</subselect>
<many-to-one name="mostRecentEmployer"
class="Organization"
column="orgId"/>
</join>
This functionality allows a degree of creativity and flexibility, but it is more practical to handle these kinds of cases using HQL or a criteria query.
Je suis en effet dans le même cas de figure.
J'ai donc mappé une association entre mon usager et la commune de cette façon:
<join table="USA_USAADR" optional="true" fetch="join">
<key column="USA_USAADR_CDN" />
<subselect>
(select usaAdresse.bdntCommune from usaUsaadrs where
usaUsaadrs.usaadrPrinOn = 1)
</subselect>
<many-to-one name="bdntCommune" class="niobe.btf.business.BdntCommune"
insert="false" update="false">
<column name="ID_COMMUNE" />
</many-to-one>
</join>
J'obtiens une erreur de mapping suivante:
GRAVE: Error parsing XML: XML InputStream(107) The content of element type "join" must match "(subselect?,comment?,key,(property|many-to-one|component|dynamic-component|any)*,sql-insert?,sql-update?,sql-delete?)".
15 sept. 2009 09:37:06 fr.gouv.agriculture.orion.util.Logs logFatal
GRAVE: Erreur d'initialisation de contexte.
fr.gouv.agriculture.o2.kernel.KernelException: org.hibernate.InvalidMappingException: Could not parse mapping document from resource niobe/buf/business/UsaUsager.hbm.xml
at org.hibernate.cfg.Configuration.addResource(Configuration.java:569)
at org.hibernate.cfg.Configuration.parseMappingElement(Configuration.java:1587)
at org.hibernate.cfg.Configuration.parseSessionFactory(Configuration.java:1555)
at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1534)
at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1508)
at org.hibernate.cfg.Configuration.configure(Configuration.java:1443)
Est ce que quelqu'un a déjà utilisé ce pattern là et pourrait m'aider a le mettre en œuvre?
cordialement,
Jérôme