2012-05-18 93 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的一对多关系而不是列表班?这样做有什么缺点吗? –