J'utilise Hibernate sur des tables d'une base patrimoniale DB2/AS400 et je cherche à regrouper des données de plusieurs tables dans une classe.
Les clés primaires de ces tables sont basées sur plusieurs colonnes, d'où l'utilisation du composite-id.
Est-il possible d'utiliser un des éléments du composite-id pour faire une jointure vers une table n'ayant pas les 2 éléments comme clé primaire?
Pour être plus clair voici un exemple :
Comment charger le libelle de SANAP10 sachant que le code de SAN7P10 : N7CPRD correspond au code de SANAP10 : NACPRG?
Hibernate version: 3.0.2
Mapping documents:
<class name="mysql.test.MyClass" table="SAN7P10">
<composite-id name="maPK" class="mysql.test.MyClassPK">
<key-property name="code" column="N7CPRD" />
<key-property name="id" column="N7NCON" />
</composite-id>
...
<join table="SANAP10" >
<key column="NACPRG" />
<property name="libelle" column="NALNPR" type="java.lang.String" />
</join>
Code between sessionFactory.openSession() and session.close():
session.get(MyClass.class, myClassPK);
Full stack trace of any exception that occurs:
1) testFormula(mysql.test.MySQLTest)java.lang.ExceptionInInitializerError
at mysql.test.MySQLTest.testFormula(MySQLTest.java:15)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at mysql.test.MySQLTest.main(MySQLTest.java:35)
Caused by: java.lang.RuntimeException: Problème de configuration : Foreign key (codeProduit:SANAP10 [NACPRG])) must have same number of columns as the referenced primary key (SAN7P10 [N7CPRD,N7NCON])
at mysql.test.HibernateUtil.<clinit>(HibernateUtil.java:16)
... 17 more
Caused by: org.hibernate.MappingException: Foreign key (codeProduit:SANAP10 [NACPRG])) must have same number of columns as the referenced primary key (SAN7P10 [N7CPRD,N7NCON])
at org.hibernate.mapping.ForeignKey.alignColumns(ForeignKey.java:86)
at org.hibernate.mapping.ForeignKey.setReferencedTable(ForeignKey.java:51)
at org.hibernate.cfg.Configuration.secondPassCompileForeignKeys(Configuration.java:953)
at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:898)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1049)
at mysql.test.HibernateUtil.<clinit>(HibernateUtil.java:14)
... 17 more
Name and version of the database you are using:
MySQL 4.1
|