2012-05-18 94 views
0

我有對象:JPA EJBQL查詢

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

person.hbm是這樣的:

<?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> 

現在我試圖讓所有的AnsMsg列表= FROMPERSON 6和所有AnsMsg parent_id = 3;

我的查詢應該如何? ( 我的意思是這樣的:

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

當然這個查詢沒有猜想工作.. )

這怎麼我的數據極爲相象:

Db example

感謝提前。

+0

在您對實體AnsMsg的描述中沒有parent_id。正如你自己所說的,你正在尋找ansMsg.fromPerson.id = 6的AnsMsg實例,那麼爲什麼你的查詢中有'ansMsg.fromPerson ='6''? –

回答

0

試試這個:

select m.* from Person p, p.msgList m, m.fromPersonInfo f where p.id = 6 or f.id = 6 
  1. 父ID(接受者,我想)確定參加人員和AnsMsg表。通過有人送
  2. 的消息retieved使用m.fromPersonInfo.id,雖然JPA無法評價這種表達,所以,必須要分離到m.fromPersonInfo ff.id = 6

實驗值:如果使用人與PersonInfo實例作爲參數您的查詢應該如下所示:select m.* from Person p, p.msgList m where p = :person or m.fromPersonInfo = :fromPersonInfo

+0

感謝您的重播,但像你可以看到msgList is't映射..它的列表,包括maped對象(andMsg)這樣我得到「p.msgList沒有映射」,當我嘗試運行「select m。* from Person p,p.msgList m,m.fromPersonInfo f其中p.id = 6或f.id = 6「 – user986474

+0

不能將msgList映射爲Person和msg.AnsMsg的一對多關係而不是列表班?這樣做有什麼缺點嗎? –