Objectbox从基类继承属性基类本身不是实体

问题描述

我有一个简单的基类,我想在其中包含一些公共字段,例如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;
        }
    }