Objectbox наследует свойства от базового класса (который сам по себе не является сущностью)

#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;
        }
    }