1

たとえば、2 つのテーブルがあります: table1 = book、table2 = site --> 1 つの book に n 個のサイトを含めることができます。

<entity name="book" dataSource="myDs" pk="id"
        transformer="TemplateTransformer"
        query="SELECT b.id, b.title, s.id, s.number, s.content
                     FROM book b. site s WHERE b.id = s.book">
        <field column="b.id" name="id" />
        <field column="s.id" name="sId" />
        <field column="id" template="${id}_${sId}" ignoreMissingVariables="true" />
    </entity>

なぜこれが機能しないのですか?結果として 1 つのサイトを持つ 1 本だけを取得し、x サイトを持つ x 本ではなく、フィールド「id」に複合キーを取得しません。

4

3 に答える 3

2

最近、同様の問題に遭遇し、次の点で修正されました。

  1. SQL クエリでは、エイリアスを使用して個別の列名を取得します。データベースによって異なる可能性があるため、alias の構文を再確認してください。
  2. テンプレート トランスフォーマーを使用するか、(内部エンティティで) サブ選択を行う場合は、常に entity.COLUMN_NAME_IN_CAPITAL を使用します。誰かが解決策としてそれを提案したsolrフォーラムに出くわすまで、大文字の列は本当に私を困惑させました(残念ながら、私はこの役立つ情報を提供した投稿のURLを持っていません).

私はOracle DBに対して上記を行っていました。それが他のDBに当てはまるかどうかは100%わかりませんが、解決策を共有したかった.

上記の変更を加えて DIH を再定義する試みを次に示します。

<entity name="book" dataSource="myDs" pk="id"
    transformer="TemplateTransformer"
    query="SELECT b.id, b.title, s.id as sid, s.number, s.content
                 FROM book b. site s WHERE b.id = s.book">
    <field column="sid" name="sid" />
    <field column="id" template="${book.ID}_${book.SID}"/>
</entity>
于 2012-10-23T15:51:44.777 に答える
0

schema.xml ファイルの id フィールドと sId フィールドにmultivalued=trueを追加します。

于 2012-10-12T09:00:45.850 に答える