#java #objectbox
#java #objectbox
Вопрос:
У меня есть простой базовый класс, в котором я хочу иметь некоторые общие поля, такие как id и т.д. Базовый класс сам по себе не является сущностью.
public class Base {
@Id
protected long id;
protected String someOtherCommonProperty;
}
И у меня есть класс сущностей, расширяющий базовый класс.
@Entity
public class Entity extends Base {
String name;
String address;
}
Я ожидал бы, что класс entity унаследует поля от базового класса, но то, что я получаю, это
[ObjectBox] No @Id property found for 'Entity', add @Id on a not-null long property.
Есть ли какой-либо способ исправить это, помимо использования интерфейсов и наличия большого количества дублированного кода?
Комментарии:
1. Приведенная в примере сущность не расширяет Base, хотя я уверен, что ваша расширяет.
Ответ №1:
Вы можете использовать @BaseEntity
аннотацию.
Взгляните на документацию: Objectbox — наследование сущности.
Бесстыдная копия для дальнейшего использования:
В дополнение к
@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;
}
}