0

重要: 私は Play について話していることに注意してください! 2.x ではなく、フレームワーク バージョン 1 (1.2.6)

Play に 2 つのエンティティがあります。そのようなv1アプリケーション:

@Entity
@Table(name = "T_FOO")
public class Foo extends GenericModel {

    @Id
    @Column(name = "NAME")
    public String name;

    public static List<Foo> paginate(int start, int count) {
        return all().from(start).fetch(count);
    }
}

@Entity
@Table(name = "T_BAR")
public class Bar extends GenericModel {

    @Id
    @Column(name = "NAME")
    public String name;

    public static List<Bar> paginate(int start, int count) {
        return all().from(start).fetch(count);
    }
}

私のコントローラでは、問題なくそれを行うことができます:

public static void index() {
    List<Foo> foo = Foo.paginate(1, 5);
    List<Bar> bar = Bar.paginate(2, 5);
    render(foo, bar);
}

ご覧のとおり、これら 2 つのエンティティは非常に似ているため、一般的なメソッドを再グループ化するためにスーパー クラスを作成しました。

@MappedSuperclass
public class MyGenericModel<T> extends GenericModel {

    public static <T> List<T> paginate(int start, int count) {
        return all().from(start).fetch(count);
    }

}

それをエンティティの親として作成します。次に例を示します。

@Entity
@Table(name = "T_FOO")
public class Foo extends MyGenericModel<Foo> {

    @Id
    @Column(name = "NAME")
    public String name;

}

Foo.paginate()ただし、この変更により、メソッドを呼び出そうとすると次のエラーが発生します。

UnsupportedOperationException occured : Please annotate your JPA model with @javax.persistence.Entity annotation.

play.exceptions.JavaExecutionException: Please annotate your JPA model with @javax.persistence.Entity annotation.
    at play.mvc.ActionInvoker.invoke(ActionInvoker.java:237)
    at Invocation.HTTP Request(Play!)
Caused by: java.lang.UnsupportedOperationException: Please annotate your JPA model with @javax.persistence.Entity annotation.

どうやらプレイ!は、私が望んでいない注釈MyGenericModel@Entity注釈を付けたいと思っています。MyGenericModelで注釈を付けるとこの問題を回避できると思い@MappedSuperclassましたが、そうではありません。

私は何を間違えましたか、そしてそれを正しく機能させるにはどうすればよいですか?

ありがとう。

4

2 に答える 2

0

残念ながら (これは私の苦痛でもあります) ジェネリックはまだ Ebean でサポートされていません:

https://groups.google.com/forum/#!searchin/ebean/generics/ebean/QWjpI0LRCiA/io-Lm_gfYE4J

于 2013-08-30T08:21:35.293 に答える
0

残念ながら、クラスMyGenericModelから関数all()を呼び出すことはできません。その関数は実行時に拡張され、 @Entityで注釈が付けられたクラスに対してのみ拡張されるためです。

考えられる解決策は、クエリに独自のエンティティ マネージャーを使用することです。

または、最初のオプションに戻ることもできます。それには何も問題はありませんでした:)

于 2013-08-31T00:20:23.373 に答える