问题描述
我有一个简单的基类,我想在其中包含一些公共字段,例如id等。基类本身不是实体。
public class Base {
@Id
protected long id;
protected String someOtherCommonProperty;
}
@Entity
public class Entity extends Base {
String name;
String address;
}
我希望实体类继承基类的字段,但是我得到的是
[ObjectBox] No @Id property found for 'Entity',add @Id on a not-null long property.
除了使用接口并有很多重复的代码外,还有什么方法可以解决此问题?
解决方法
您可以使用@BaseEntity
批注。
看一下文档:Objectbox - Entity Inheritence。
无耻的副本以供将来参考
除了
@Entity
批注之外,我们还为基类引入了@BaseEntity
批注,该批注可以代替@Entity
使用。 有三种类型的基类,通过注释定义:
- 无注释:不考虑基类及其属性的持久性。
-
@BaseEntity
:在子类中考虑了属性的持久性,但是基类本身无法持久化。 -
@Entity
:子类考虑了属性的持久性,而基类本身是通常持久的实体。
示例:
// base class:
@BaseEntity
public abstract class Base {
@Id long id;
String baseString;
public Base() {
}
public Base(long id,String baseString) {
this.id = id;
this.baseString = baseString;
}
}
// sub class:
@Entity
public class Sub extends Base {
String subString;
public Sub() {
}
public Sub(long id,String baseString,String subString) {
super(id,baseString);
this.subString = subString;
}
}