2012-04-18 81 views
3

我定義它不具有域基本模型,並通過Ebean的Eclipse插件增強它。然後,我使用Java反編譯器進行反編譯了一下,發現ebean有添加一些領域和方法,它: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的增強,通過月食編譯。

我認爲應該有由Ebean提高相同的效果。

然後我打包作爲一個罐子,把它放在我的項目,定義的模型類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是如何檢查一個班級是否得到了加強?

+0

我找到了一種方法來檢查什麼Ebean做了一個模型。使用一些Java反編譯器將增強的.class文件轉換爲java,您可以看到模型實現了Ebean的一個接口(還有一些額外的方法)。我認爲Ebean會檢查它。 – Freewind 2012-05-11 03:45:54

回答

2

Ebean增加了增強你的models.Article課呢 - 基本上每一個屬性/的getter/setter。

再次創建該層次結構(不添加東西模型)和檢查所產生的兩個對象的代碼。