Deux classes pour la même table
Bonjour,
j'ai une problématique que je n'ai pas réussi à trouver sur le forum ou dans les faq (et pas plus dans la doc officiel d'hibernate).
J'ai une table Toto, j'ai un objet A (avec A.hbm.xml) qui est le mapping.
J'ai une classe B qui étend A (avec B.hbm.xml).
Le fichier de mapping A.hbm.xml et B.hbm.xml sont identique à l'exception de la classe configuré de dans et d'une configuration sur un champ (update = "false" insert = "false").
Code:
1 2 3 4 5 6
|
public class A {
}
public class B extends A {
} |
Le mapping de A
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
|
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 2.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd" >
<hibernate-mapping>
<class name="A" table="Toto" lazy="true" >
<meta attribute="class-description" >
@hibernate.class
table="Toto"
</meta>
<property
name="monchamp"
type="java.lang.Integer"
not-null="true">
<meta attribute="field-description">
@hibernate.property
column="MONCHAMP"
length="8"
</meta>
<column name="MONCHAMP" sql-type="NUMBER(8)" not-null="true" />
</property>
... |
Le mapping de B
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
|
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 2.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd" >
<hibernate-mapping>
<class name="B" table="Toto" lazy="true" >
<meta attribute="class-description" >
@hibernate.class
table="Toto"
</meta>
<property
name="monchamp"
type="java.lang.Integer"
not-null="true" update = "false" insert = "false">
<meta attribute="field-description">
@hibernate.property
column="MONCHAMP"
length="8"
</meta>
<column name="MONCHAMP" sql-type="NUMBER(8)" not-null="true" />
</property>
... |
Lorsque je recherche un objet B, il me retourne le double de ligne car il me retourne un objet A et B.
Et c'est cette situation que je voudrais résoudre.
J'ai cherché du coté <sub-class> <joined-class> mais le problème, c'est que je n'ai pas de discriminant.
Le système peut vous paraître étrange, mais je dois faire avec l'existant. Il a été mis en place pour empêcher le champ d'être mis à jour dans certain cas (c'est un peu étrange comme méthode...)
Existe-t-il une possibilité de résoudre le problème ?
Pour l'instant, si je créer 2 classes, sans héritage, ça fonctionne.
Merci