4

Hibernate 管理の POJO であるセットを持つDetectableクラスがあります。また、 hbm.xmlファイルRevisionsを使用してエンティティをマッピングしています。ユーザーが管理画面に移動すると、最後に行われたデータも含まれるテーブルにデータが表示されるようにします。ただし、リビジョンの完全なセットは、検出可能な詳細ページにアクセスしてのみ利用できます。DetectableDetectableRevision

Detectable私のチャンスは、各インスタンスの属性として個別にロードされる最終リビジョン日付を表示することです。だから私はそのようなものを持っています:

detectable.hbm.xml

<set name="_Revisions" table="trevision" inverse="true" lazy="true">
    <key>
        <column name="id_detectable" />
    </key>
    <one-to-many class="com.company.model.tasks.Revision" />
</set>

<property name="_LastRevisionDate"
        formula="select max(rev.start_date) from trevision rev where rev.id_detectable = _Id"
        type="date" />

それは機能せず、hibernate がformulaに含まれるクエリを実行しようとすると、SQL 構文エラーが発生します。標準 SQLまたはHQLを使用してこのプロパティに到達できるさまざまな場所を見てきましたが、両方で失敗しました。Revisionまた、エンティティ全体(最後のリビジョンを意味します)を日付順にのみ達成することは可能でしょうか?

あなたのアイデアをまとめてください!

4

2 に答える 2

5

私は最終的にこのコードでそれを達成しました:

<property name="_LastRevisionDate"
        formula="(select MAX(rev.start_date) from trevision rev where rev.id_detectable = id_detectable and rev.status != 'DRAFT')"
        type="date" />

id_detectable現在のエンティティ キー列はどこですか。


アップデート

もう 1 つの回避策は、DB ビューを使用して最終リビジョン日付を取得することです。次に、元のテーブルではなく、そのビューに対してエンティティをマップするという選択肢があります。

于 2013-04-06T10:20:15.600 に答える