在我的代码中,我将一些基本字段放在基本抽象类 BaseEntity
中:
public abstract class BaseEntity {
@Id
private long id;
public BaseEntity() {
}
public BaseEntity(long id) {
this.id = id;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
}
因此,在子类 User
中,我没有定义 id
字段:
@Entity
public class User extends BaseEntity {
private String name;
private String login;
private String gender;
private String email;
private String phoneNumber;
private Date registrationDate;
private Date lastActivityDate;
private long systemId;
public User() {
}
...Getters and Setters
}
因为它在父类(super class)中定义。我不想在每个类中创建一个 id
字段,也不想在数据库 BaseEntity
类中持久化。我得到一个错误:
错误:[ObjectBox] 代码生成失败:找不到实体用户的 ID 属性(包:...)
如何通过继承使用对象框?
最佳答案
目前不支持实体的多态性,但是有一个feature request .
如果有帮助,您可以寻求接口(interface)。例如:
public interface BaseEntity {
long getId();
}
注意:您可以为 ID 设置一个 setter,但我个人的建议是将 id 字段包私有(private)(这样 ObjectBox 可以从生成的类中访问)并且没有 setter,因为它表明可以更改随时提供 ID。
更新:引入了 ObjectBox 1.4 entity inheritance (非多态)。
关于java - 实体中的继承,使用objectbox,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46256275/