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.  [ 2 posts ] 
Author Message
 Post subject: comment écrire une requete sur une Map<String,String>
PostPosted: Mon Nov 20, 2006 1:03 pm 
Newbie

Joined: Mon Nov 20, 2006 12:41 pm
Posts: 4
Bonjour,

Après une longue recherche infructueuse je me résous à poster. Mon problème est que je ne sais pas comment écrire une requête (hql, criteria, ...) sur une Map. Je m'explique :

J'utilise hibernate 3.2 avec les annotations ejb3.
J'ai une classe LoggingData qui contient entre autres un attribut xmlValues de type Map<String,String> que j'ai mappé de la façon suivante :
Code:
@CollectionOfElements
    @JoinTable(name="logging_xmlvalue",joinColumns=@JoinColumn (name="logging_fk"))
    public Map<String, String> getXmlValues() {
        return xmlValues;
    }


En base j'ai donc deux tables : logging (qui contient les attributs "simples" de LoggingData) et logging_xmlvalue (qui contient les maps). Voilà le schéma de cette dernière :
Code:
CREATE TABLE LOGGING_XMLVALUE (
   logging_fk NUMBER(20) REFERENCES logging(oid),
   mapkey NVARCHAR2(255),
   element NVARCHAR2(255))


Les méthodes create, read, update, delete fonctionne parfaitement. Comment écrire une requête de la forme : "trouve tous les LoggingData dont la map contient la clé 'name' et dont la valeur correspondante est 'valeur 1' ?"

Merci pour vos réponses


Top
 Profile  
 
 Post subject: Re: comment écrire une requete sur une Map<String,String
PostPosted: Thu Nov 23, 2006 12:56 pm 
Newbie

Joined: Thu Nov 23, 2006 12:18 pm
Posts: 7
Michel wrote:
Comment écrire une requête de la forme : "trouve tous les LoggingData dont la map contient la clé 'name' et dont la valeur correspondante est 'valeur 1' ?"


Si j'ai bien compris ton problème,
je dirais avec :
Code:
SELECT ld FROM LoggingData ld JOIN ld.xmlValues xmlvalue WHERE xmlvalue.mapkey = 'name' AND xmlvalue.element = 'valeur 1'


ou encore mieux (de mémoire celà fonctionne aussi)
Code:
SELECT lf FROM LoggingData ld WHERE ld.xmlValues['name'] = 'valeur 1'


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

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.