2012-05-18 3 views
0

Je objets:Jpa requête EJBQL par la propriété de la liste

PersenInfo : (long id,String name, String lastName,String email) 
AnsMsg : (long id,PersenInfo fromPersoninfo,String theMsg) 
Person : (PersonInfo personInfo, List<AnsMsg> msgs) 

person.hbm ressemblent à ceci:

<?xml version="1.0"?> 
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
<!-- Generated May 4, 2012 2:48:41 PM by Hibernate Tools 3.4.0.CR1 --> 
<hibernate-mapping> 
    <class name="Entities.Person" table="PERSON"> 
     <id name="id" type="long"> 
      <column name="ID" /> 
      <generator class="increment" /> 
     </id> 
     <many-to-one name="personInfo" class="Entities.PersonInfo" cascade="all" not-null="false" lazy="false"/> 

     <property name="_pass" type="java.lang.String" access="field" lazy="false"> 
      <column name="_PASS" /> 
     </property> 
     <property name="_IsConnect" type="int" access="field" lazy="false"> 
      <column name="_ISCONNECT" /> 
     </property> 
     <property name="c2dmId" type="java.lang.String" lazy="false"> 
      <column name="C2DMID" /> 
     </property> 

     <property name="lastSeen" type="long" lazy="false"> 
      <column name="LASTSEEN" /> 
     </property> 
     <list name="msgList" inverse="false" table="ANSMSG" lazy="false" > 
      <key column="parent_id" /> 
       <index column="idx" /> 
      <one-to-many class="msg.AnsMsg" /> 
     </list> 
    </class> 
</hibernate-mapping> 

maintenant j'essayer d'obtenir toute la liste AnsMsg que fromPerson = 6 et tous AnsMsg que parent_id = 3;

comment ma requête devrait-elle ressembler? ( je veux dire quelque chose comme ceci:

"from AnsMsg ansMsg where ansMsg.fromPerson.id='6' or ansMsg.parent_id='6'" 

bien sûr cette requête n'a pas supposé travailler .. )

ce que mon sosie de données:

Db example

merci en avance.

+0

Il n'y a pas de parent_id dans votre description de l'entité AnsMsg. Et comme vous l'avez dit vous-même, vous recherchez les instances AnsMsg pour lesquelles 'ansMsg.fromPerson.id = 6', alors pourquoi avez-vous' ansMsg.fromPerson = '6'' dans votre requête? –

Répondre

0

Essayez ceci:

select m.* from Person p, p.msgList m, m.fromPersonInfo f where p.id = 6 or f.id = 6 
  1. id Parent (le bénéficiaire, je suppose) est déterminée joindre les tables et personne AnsMsg.
  2. Les messages envoyés par une personne sont retieved utilisent m.fromPersonInfo.id, bien que JPA ne peut pas évaluer cette expression, donc, doivent être déposés à m.fromPersonInfo f et f.id = 6

Obs .: Si vous utilisez des instances et personne personinfo en tant que paramètres de votre requête vous devriez faire comme ceci: select m.* from Person p, p.msgList m where p = :person or m.fromPersonInfo = :fromPersonInfo

+0

merci pour votre replay mais comme vous pouvez voir msgList n'est pas mappé .. c'est List qui inclut l'objet maped (andMsg) de cette façon je reçois "p.msgList n'est pas mappé" quand j'essaye de lancer "select m. * From Person p, p.msgList m, m.fromPersonInfo f où p.id = 6 ou f.id = 6 " – user986474

+0

Impossible de mapper msgList comme une relation un-à-plusieurs, pas comme une liste, de Person et msg.AnsMsg Des classes? Y a-t-il des inconvénients à le faire? –

Questions connexes