使用单 table 继承时如何在 Ebean 查询中使用鉴别器值?

How to use discriminator value in Ebean queries when using single table inheritance?

我有以下具有单一 table 继承策略的实体。

@Entity
@Inheritance
@DiscriminatorColumn(name="type")
public abstract class Vehicle extends com.avaje.ebean.Model {
    @Id
    public Long id;
    public String name;
    public String description;
}

@Entity
@DiscriminatorValue("b")
public class Bus extends Vehicle {
    public String field1;
}

@Entity
@DiscriminatorValue("c")
public class Car extends Vehicle {
    public String field2;
}

我的 UI 中有一个 table,它应该显示带有车辆字段列的行。我想进行高级搜索,用户可以按类型过滤车辆列表。

我的问题是如何创建查询以按车辆类型过滤列表。 类似这样的事情:

List<Vehicle> list = com.avaje.ebean.Ebean.find(Vehicle.class)
    .where().eq("type", "c").findList();

如果我插入一个已经讨论过 here 的具有以下定义的字段,我会收到一条错误消息 "Error injecting constructor, java.lang.IllegalStateException: Property theType not found in [id, name, description] for type class models.Vehicle"

@Column(name = "type", insertable = false, updatable = false)
public String theType;

如果我将它设置为@Transient,我将无法在查询中使用它。

您可以使用@Formula 注释,如 ebean docs 中所述。

@Transient
@Formula(select = "type")
public String theType;

当然要注意:

As the field is also Transient it is not included by default in queries - it needs to be explicitly included.