mysql - Java 中的 EBean - 使用 @MappedSuperclass 进行继承

标签 mysql eclipse playframework ebean mappedsuperclass

我目前正在 Ubuntu 上使用 Play Framework 2.2.2 编写一个新的 Java 项目。我正在尝试建立一个非常简单的类层次结构,该层次结构将允许不同的数据库持久元素从一个公共(public) BaseEntity 类继承公共(public)字段,例如 id、created_at、deleted_at 等,以避免重写相同的样板。

我目前正在使用的示例如下所示。

@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 时,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-ers 或将它们移动到基类会导致相同的异常。我不知疲倦地在网上寻找一些例子来说明我做错了什么,但还没有找到任何解决办法。我确信这很简单。有人可以帮忙吗?

问候。

最佳答案

这对我有用。我没有使用 getter 或 setter。我在 Play 2.2 上开发了它,现在在 2.3 上运行。为了清楚起见,我删除了大部分字段。可能是因为您将名称字段标记为 protected ?

@MappedSuperclass
public abstract class Member extends Model {

    @Id
    public Long id;
    public String businessName;
    public String webAddress;
..
}

@Entity
public class Supplier extends Member {

    public int minimumNoticeInHours;
    public int maximumNoticeInDays;
..
}

关于mysql - Java 中的 EBean - 使用 @MappedSuperclass 进行继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25610294/

相关文章:

java - 具有两个源目录的 eclipse java 项目 - 如何设置源文件夹的可见性

android - 获取 adb 版本失败...没有那个文件或目录

scala - Play 2.0 是否禁用 1.x 中提供的包罗万象的路由使用

playframework - 如何在 Play Framework 2.5 上测试表单?

java - 注解指定的bean名称与现有错误冲突但仅在gradle中

php - MySQL LEFT JOIN 多表逻辑问题

mysql - SQL 平均值然后尾随数字

php - MySQL 左连接 'b' s 限制

ssl - CloudBees 上具有多个 SSL 证书 (SNI) 的 Multi-Tenancy 应用程序

php - 如何在codeigniter中插入多列?