我有以下具有单表继承策略的实体。
@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,我无法在查询中使用它。
答案 0 :(得分:1)
您可以使用@Formula注释,如ebean docs中所述。
@Transient
@Formula(select = "type")
public String theType;
当然要注意:
由于该字段也是Transient,因此默认情况下不包含在查询中 - 需要明确包含它。