フィールドを持たない基本モデルを定義し、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がどのようにチェックするのだろうか?