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 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
public class A {
}
 
public class B extends A {
}
Le mapping de A
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
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 : 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
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