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

时间:2017-08-10 12:04:49

标签: java inheritance ebean single-table-inheritance

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

@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中有一个表格,应该显示包含Vehicle&#39字段列的行。我想进行高级搜索,用户可以按类型过滤车辆列表。

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

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

如果我插入一个已经讨论过的here以下定义的字段,我会收到错误消息&#34;错误注入构造函数,java.lang.IllegalStateException:在[id中找不到属性theType,名称,描述]为类型类型.Vehicle&#34;

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

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

1 个答案:

答案 0 :(得分:1)

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

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

当然要注意:

  

由于该字段也是Transient,因此默认情况下不包含在查询中 - 需要明确包含它。