2

私はsNodeに関連付けられているを持っていNodeDataます。これらNodeDataにはリビジョンがあり、NodeにはlatestRevision最後のリビジョンを示す列があります。

latestRevision以下のセットをinでフィルタリングするために必要なマッピングを理解しようとしていNodeます。

 <class name="Node" table="RatNodes">
    <id name="id">
        <generator class="native"/>
    </id>
    <set fetch="join" name="nodeDatas" table="RatNodeData" inverse="true" access="field" cascade="all-delete-orphan" order-by="dataOrder asc">
        <key column="nodeID" on-delete="cascade"/>
        <one-to-many class="NodeData"/>
        <filter name="revisionFilter" condition="revision = latestRevision"/>
    </set>
    <property name="questionNumber" access="field"/>
    <property name="type" access="field"/>
</class>
<class name="NodeData" table="RatNodeData">
    <composite-id>
        <key-property name="nodeID" access="field"/>
        <key-property name="key" access="field" column="dataKey"/>
        <key-property name="order" access="field" column="dataOrder"/>
        <key-property name="revision" access="field"/>
    </composite-id>
    <property name="value" access="field" type="EncodedStringUserType" column="dataValue"/>
</class>

フィルタを有効にしたときのこのマッピングの結果はエラーです。

Caused by: com.jnetdirect.jsql.JSQLException: Invalid column name 'latestRevision'.

それが吐き出すクエリは次のとおりです。

select nodedatas0_.nodeID as nodeID1_, nodedatas0_.dataKey as dataKey1_, nodedatas0_.dataOrder as dataOrder1_, nodedatas0_.revision as revision1_, nodedatas0_.nodeID as nodeID46_0_, nodedatas0_.dataKey as dataKey46_0_, nodedatas0_.dataOrder as dataOrder46_0_, nodedatas0_.revision as revision46_0_, nodedatas0_.dataValue as dataValue46_0_ from RatNodeData nodedatas0_ where  nodedatas0_.revision = nodedatas0_.latestRevision and nodedatas0_.nodeID=? order by nodedatas0_.dataOrder asc

探しているのでこれが間違っているとはlatestRevision言えますが、代わりNodeDataに見るように指示する方法がわかりませんNode。これは休止状態で可能ですか?SQLを使用しているだけの場合は、非常に単純なクエリのように見えます。

4

2 に答える 2

0

filter-param としてフィルターまたは 'latestRevision' を定義していません。そのため、実体が実際に何を意味するのかを知るようにはなりません。以下を使用してみてください。

さらにヘルプが必要な場合は、リンクを参照してください。

于 2012-10-05T05:55:18.020 に答える
0

マッピングファイルでそれをしようとする代わりに、これを行うことになりました:

List datas = session.createCriteria(NodeData.class)
                .add(Restrictions.eq("nodeID", this.id))
                .add(Restrictions.eq("revision", this.latestRevision))
                .list();

これがこれを行う正しい方法であるかどうかはわかりません。マッピング ファイル ソリューションについても知りたいです。

于 2012-10-03T18:56:36.303 に答える