我目前正在Ubuntu上使用Play Framework 2.2.2編寫一個新的Java項目。我試圖建立一個非常簡單的類層次結構,它允許不同的db-persistable元素從一個公共BaseEntity類繼承公共字段,例如id,created_at,deleted_at等,以避免重寫相同的鍋爐板。Java中的EBean - 使用@MappedSuperclass繼承
我正在使用的例子看起來像這樣。
@Entity
public class User extends BaseEntity {
@Id
public int id;
@Constraints.Required
public String email;
@Constraints.Required
public IUser.Status status;
public String activationCode;
public User()
{
...
}
}
爲了實驗我創建了一個簡單的基類,它帶有一個新的屬性name。這種精細編譯:
@MappedSuperclass
public abstract class BaseEntity extends Model {
protected String name;
public String getName()
{
return this.name;
}
public void setName(String value)
{
this.name = value;
}
public BaseEntity()
{
}
}
現在,當BaseEntity類不包含名稱字段或GETSET-ERS,EBean可以成功地將實體保存到數據庫。一旦我將該字段添加到getter和setter中,試圖保存實體Play時發生崩潰,但發生以下異常:
java.lang.NoSuchMethodError:models.User._ebean_getni_name()Ljava/lang/String; 在models.User._ebean_getField(User.java:1) 在com.avaje.ebeaninternal.server.reflect.EnhanceBeanReflect $ Getter.get(EnhanceBeanReflect.java:162).....
卸下GETSET或將它們移動到基類導致相同的異常。我已經很不知疲倦地上網瞭解我做錯了什麼的例子,但沒有發現任何修復它的東西。我相信這很簡單。誰能幫忙?
問候。
謝謝,我認爲這可能與編譯問題有關 - 當我手動添加它缺少的屬性時, _ebean_getni_name它編譯得很好。我認爲這些是爲了自動生成的屬性,由於某些原因,不能爲基類正確生成。訪問修飾符沒有區別。已經轉向更簡單,更少問題的ORM了! – mistakenot 2014-10-06 21:03:27