3

フィールドを持たない基本モデルを定義し、Ebean の Eclipse プラグインで拡張しました。次に、Java 逆コンパイラを使用して逆コンパイルすると、ebean がいくつかのフィールドとメソッドを追加していることがわかりました。

private static String _EBEAN_MARKER = "play.modules.ebean.Model";

protected EntityBeanIntercept _ebean_intercept = new EntityBeanIntercept(this);

protected transient Object _ebean_identity;

public String _ebean_getMarker() {
    return _EBEAN_MARKER;
}

public EntityBeanIntercept _ebean_getIntercept() {
    return this._ebean_intercept;
}

public EntityBeanIntercept _ebean_intercept() {
    if (this._ebean_intercept == null)
        this._ebean_intercept = new EntityBeanIntercept(this);
    return this._ebean_intercept;
}

public void addPropertyChangeListener(PropertyChangeListener listener) {
    this._ebean_intercept.addPropertyChangeListener(listener);
}

public void addPropertyChangeListener(String name, PropertyChangeListener listener) {
    this._ebean_intercept.addPropertyChangeListener(name, listener);
}

public void removePropertyChangeListener(PropertyChangeListener listener) {
    this._ebean_intercept.removePropertyChangeListener(listener);
}

public void removePropertyChangeListener(String name, PropertyChangeListener listener) {
    this._ebean_intercept.removePropertyChangeListener(name, listener);
}

public void _ebean_setEmbeddedLoaded() {}

public boolean _ebean_isEmbeddedNewOrDirty() {
    return false;
}

public Object _ebean_newInstance() {
    return new Model();
}

次に、これらのコードを元の Model クラスにコピーし、Ebean のエンハンサーを無効にして、Eclipse でコンパイルしました。

イービーンで強化したのと同じ効果があるはずだと思った。

次に、それをjarとしてパッケージ化し、プロジェクトに入れ、モデルクラスArticleを定義して拡張しました。

しかし、エラーがあります:

An unexpected error occured caused by exception PersistenceException:
java.lang.IllegalStateException: Class [class test.Model] is not enhanced 
  and [class models.Article] is - (you can not mix!!)

Ebean は私の新しいModelクラスを強化されたものとして扱っていないようです。クラスがそれによって強化されているかどうかをEbeanがどのようにチェックするのだろうか?

4

1 に答える 1

2

Ebean は、models.Article クラスにも拡張機能を追加します - 基本的にすべてのプロパティ/ゲッター/セッター用です。

この階層を (モデルに追加せずに) 再度作成し、両方のオブジェクトの結果のコードを調べます。

于 2012-04-18T08:37:55.407 に答える