0

我有对象:

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>

现在我尝试获取AnsMsgfromPerson=6 和AnsMsgparent_id=3 的所有列表;

我的查询应该是什么样子?(我的意思是这样的:

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

当然这个查询不应该工作..)

我的数据看起来很像:

数据库示例

提前致谢。

4

1 回答 1

0

尝试这个:

select m.* from Person p, p.msgList m, m.fromPersonInfo f where p.id = 6 or f.id = 6
  1. 父 ID(我想是收件人)确定加入 Person 和 AnsMsg 表。
  2. 某人发送的消息使用 进行检索m.fromPersonInfo.id,尽管 JPA 无法评估此类表达式,因此必须将其分离到m.fromPersonInfo fandf.id = 6

Obs.:如果您使用 Person 和 PersonInfo 实例作为查询的参数,您应该这样做:select m.* from Person p, p.msgList m where p = :person or m.fromPersonInfo = :fromPersonInfo

于 2012-05-18T17:14:45.353 回答