私はcreated
とupdated
フィールドをすべての拡張モデルに追加する抽象的なTemporalModelクラス(@MappedSuperclass
と注釈付き)を持っています。私はそれにgetLatest()
静的メソッドを追加したい:私は、基本クラスでこのメソッドを置くとき@MappedSuperclassesで静的メソッドを作成できますか?
public static TemporalModel getLatest() {
return find("order by created").first();
}
、および具象クラス(Transaction.getLatest()
)を介してそれを呼び出す、私はエラーを取得:
UnsupportedOperationException occured : Please annotate your JPA model with @javax.persistence.Entity annotation.
私はこれがJPAが実際にこのメソッドを基本クラスを通して "呼び出す"ことを知っていないからです(Javaでは実際の静的メソッド継承はありません)。
このメソッドをすべてのエンティティクラスで繰り返すのではなく、一度実装する別の方法はありますか?
更新 - (私は別の重いアプリで使用しています)、これを達成するための一つの方法は、(gist)hereに記載されています。しかし、私の現在のアプリケーションでは、リポジトリを使いたくないのですが、別の、より軽い解決策があるのだろうかと思いました。
私が好きなときはいつでも(DataNucleus JPAを使用して)私のJPAエンティティで静的メソッドを呼び出すことができます。 JPA(仕様)は、このフォームを実装に制限しません。使用するクラスと永続コードを定義することをお勧めします。 – DataNucleus
@DataNucleus - これは、hibernateを介してPlay Frameworkのデフォルトの永続性を使用して呼び出されます。 – ripper234
はい、私はあなたが使っていることを知っていますが、その下にJPAを使用しています。したがって、JPAからの制限はありません。おそらく、Hibernate、またはPlayからですが、JPAはありません – DataNucleus