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>

AnsMsg、fromPerson=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 fあります。f.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 に答える