-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 1 post ] 
Author Message
 Post subject: Jointure entre 2 tables en une seule classe
PostPosted: Thu Jan 26, 2012 9:43 am 
Newbie

Joined: Thu Jan 26, 2012 9:33 am
Posts: 1
Bonjour à tous !

Je suis débutant en Hibernate et je rencontre quelques soucis dans son utilisation. J'espère que vous saurez m'aider :-)
Voici mon problème :

J'ai une base de données contenant plusieurs tables dont 2 en relations l'une à l'autre :
parcel(id, champ1, champ2,...) et parcel_cstm(id_c, champs_cstm1, champ_cstm2). parcel_cstm est en fait un "prolongement" de la table parcel, les champs cstm auraient pu être directement dans la table parcel mais il est impossible de toucher à la table parcel, on passe donc par une nouvelle table dont la liaison est fait par id_c (parcel.id = parcel_cstm.id_c)
Je tiens à préciser que je NE PEUX PAS MODIFIER cette architecture !

Mon souci est que je voudrais mapper ces 2 tables dans une seule classe java Parcel qui aurait les attributs champ1, champ2, champ_cstm1 et champ_cstm2.
Quelles annotations dois-je mettre dans ma classe pour réaliser un tel mapping ?


Je vous pose cette question car c'est un travail que j'ai repris et qui ne fonctionne pas complétement. Voici ce qui a été fait:

La classe Parcel a été mappé de cette manière :
Code:
@Entity
@Table (name="parcel")
public class Parcel implements Serializable {

   @Id
   @Column
   private String       id;
   @Column
   private int         champ1;
   @Column
   private int         champ2;
   @Column
   private String         champ_cstm1;
   @Column
   private String         champ_cstm2;

        ...



Ensuite pour récupérer la liste des parcel en base on exécute cette requête :
Code:
result = session.createSQLQuery( "select DISTINCT parcel.*, parcel_cstm.* from parcel, parcel_cstm
where parcel_cstm.id_c = parcel.id").addEntity(Parcel.class).list();


Étrangement (?) je récupère bien ma liste de parcel avec les champs normaux et les champs cstm dans le même objet MAIS j'ai besoin de faire un session.refresh() sur chaque objet car ils peuvent être modifié à la volée (par un autre programme) et donc parfois les résultats ne sont pas "à jour". Or ce refresh ne fonctionne pas ! J'obtiens l'erreur :
Code:
ATTENTION: SQL Error: 1054, SQLState: 42S22
19 janv. 2012 11:29:17 org.slf4j.impl.JCLLoggerAdapter error
GRAVE: Unknown column 'parcel0_.champ_cstm1' in 'field list'
19 janv. 2012 11:29:17 com.sun.jersey.spi.container.ContainerResponse mapMappableContainerException
GRAVE: The RuntimeException could not be mapped to a response, re-throwing to the HTTP container
org.hibernate.exception.SQLGrammarException: could not execute query
        at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:90)
        at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
        at org.hibernate.loader.Loader.doList(Loader.java:2235)
...

Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'parcel0_.champ_cstm1' in 'field list'
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)


Avez-vous une idée du problème? Pourquoi le refresh retourne t-il cette erreur alors que la requête fonctionne bien si je ne le met pas ?

Désolé pour le pavé, mais comme je sais que vous n'avez pas de boule de cristal j’essaie de bien exposer mon problème :p

Merci d'avance pour votre aide,
@ bientôt !


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 1 post ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.