gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 02:24:19 24 4
gpt4 key购买 nike

我目前正在 Ubuntu 上使用 Play Framework 2.2.2 编写一个新的 Java 项目。我试图建立一个非常简单的类层次结构,允许不同的 db-persistable 元素从一个公共(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-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-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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com