mapping avec JDO - Java - Programmation
Marsh Posté le 21-09-2005 à 14:08:36
tu fais une recherche d'objets classeMere ou explicitement d'objets classeFille ? si tu fais une recherche d'objets classeMere, c'est normal qu'il ne te renvoie que des objets de type classeMere, JDO doit utiliser, comme hibernate, un system de proxy et de lazy loading, du coup tous les objets que tu recuperent sont de type classeMere et delegue les appels de methode a un objet de type classeFille.
Marsh Posté le 21-09-2005 à 14:38:22
en fait on lance la requete de cette facon
Query query = persistenceManager.newquery(filter, classeFille.getClass)
Collection c = (Collection)query.execute();
ou filter est un filtre de recherche (je mets "" pour tout avoir" )
Donc on moment de la construction de la requete je passe bien classeFille
Marsh Posté le 21-09-2005 à 14:42:47
et ton filter, il ressemble a quoi ? donne un exemple de code simple qui ne fait pas ce que tu veux
Marsh Posté le 21-09-2005 à 15:31:19
filter est une string pour restreindre les reponses par exemple
String filter = "oid == 1", ne renverra que les objets qui ont un champ oid egal à 1
Pour ca on fait un mapping entre l'attribut de la classe et le champs de la bd
Mon pb sur un ex :
class A { String a; ....}
class B extends A {String b; ....}
B b = new B(); ...
b.makePersistent(); => ok, ca marche, c'est stockée dans la bd comme je l'attends
getAllB("" /*le filter */, B.class) => renvoie une collection, comme indiqué dans mon message précédent (le fameux query.execute() )
Seulement impossible de caster les éléments de cette collection en type B (ClassCastException), seulement en type A.
C'est à dire que j'ai accès au champ a de la classe A si je veux, mais pas au champ b de la classe B
Marsh Posté le 21-09-2005 à 15:41:18
tu peux mettre un vrai bout de code ?
c'est justement ta query qui m'interesse.
je crois que ta query renvoie des instances de classeMere, et que tu fais un filter avec comme contrainte classeFille, et la c'est normal que tu ne recupere que des classeMere, c'est ce que tu as demandé dans ta query...mais je ne peux que supposer vu que tu ne donnes pas de code...
Marsh Posté le 21-09-2005 à 19:24:59
En fait je mets pas de vrai bout de code parce que la machine sur laquelle je développe n'est pas celle qui a accès au net
Mais la query, ce n'est pas moi qui l'ai écrite, c'est une méthode de javax.jdo
Justement on lui passe une classe en parametre (classeFille.getClass()) et malgré ca il ne renvoit que des objetc de type mere
Mais je pense que ce n'est pas un type "flat" qu'il faut mettre en fait, seulement je n'arrive pas à faire fonctionner le type "base" non plus
Marsh Posté le 21-09-2005 à 10:25:36
salut,
Je bosse actuellement sur de la persisctence en base de données relationnelle avec un KODO / JDO
J'ai un pb au niveau du mapping, je n'arrive pas à gérer l'héritage
J'ai une classe classeMere, étendue par ClasseFille
Je souhaite stocker des objets de type classeFille dans une table
j'ai donc dans mon fichier de maping :
<class jdbc-clss-map="base" name="classeMere" table="table" pk-column="oid"/>
<class jdbc-class-map="flat" name ="classefille" />
Le "flat" est là pour signifier que les données sont stockées dans la meme table que la classe mère
Voici mon pb :
Lorsque je crée un object de type classeFille, j'arrive parfaitement à le stocker dans la bd
Mais quand je fair une recherche j'obtient des objets de type classeMere, et j'ai un classCastException si j'essaie de le caster en classe fille
Si vous avec une idée, se serait sympa
thanx