Mysql Java中的EBean-使用@MappedSuperclass进行继承
我目前正在Ubuntu上用PlayFramework2.2.2编写一个新的Java项目。我试图建立一个非常简单的类层次结构,允许不同的db持久元素从一个公共BaseEntity类继承公共字段,例如id、created_at、deleted_at等,以避免重写同一个模板 我目前正在使用的示例如下所示Mysql Java中的EBean-使用@MappedSuperclass进行继承,mysql,eclipse,playframework,ebean,mappedsuperclass,Mysql,Eclipse,Playframework,Ebean,Mappedsuperclass,我目前正在Ubuntu上用PlayFramework2.2.2编写一个新的Java项目。我试图建立一个非常简单的类层次结构,允许不同的db持久元素从一个公共BaseEntity类继承公共字段,例如id、created_at、deleted_at等,以避免重写同一个模板 我目前正在使用的示例如下所示 @Entity public class User extends BaseEntity { @Id public int id; @Constraints.Required
@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类不包含name字段或getset参数时,EBean可以成功地将实体保存到数据库中。一旦我添加了带有getter和setter的字段,在尝试保存实体时,Play崩溃,出现以下异常:
java.lang.NoSuchMethodError:models.User.\u ebean\u getni\u name()Ljava/lang/String;
在models.User.\u ebean\u getField(User.java:1)
在com.avaje.ebeaninternal.server.reflect.EnhanceBeanReflect$Getter.get(EnhanceBeanReflect.java:162)
删除getset或将它们移动到基类会导致相同的异常。我在网上不知疲倦地寻找一些例子来说明我做错了什么,但还没有找到任何可以解决这个问题的方法。我相信这很简单。有人能帮忙吗
问候。这对我很有用。我没有使用getter或setter。我在Play2.2上开发了它,现在已经在2.3上运行了。为了清晰起见,我删除了大部分字段。可能是因为名称字段被标记为受保护
@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;
..
}
谢谢,我认为这可能与编译问题有关-当我手动添加它缺少的属性时,例如,_ebean_getni_name it compiled fine。我认为这些是自动生成的属性,由于某些原因,这些属性没有为基类正确生成。访问修饰符没有任何区别。现在我们已经转向一个更简单、问题更少的ORM!