给出一个Hibernate实体Foo
@Entity
@Table(name = "foo")
class Foo {
//ID Field
@Column(name = "bar", nullable = false)
@Enumerated(EnumType.STRING)
private Bar bar;
//Getters, Setters
}
和一个枚举Bar
enum Bar {
CAT,
CRADLE,
SILVER,
SPOON;
}
我想运行一个查询,检查Foo.bar的值是否包含一些字符串matchString
=“ADL”。
目前,我的DetachedCriteria对象构造为:
DetachedCriteria.forClass(Foo.class)
.add(Restrictions.like("bar", matchString, MatchMode.ANYWHERE));`
但在调用时会导致java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Enum
。
答案 0 :(得分:2)
只有在使用String值而不是序号持久化枚举时才能进行这样的查询 - 但即便如此,我也不希望条件API必须支持枚举的类似内容。
您可以找到名称中包含“bar”(在Java代码中)的所有枚举,而不是尝试在数据库级别执行此类操作,然后查询“bar”在该集合中的所有匹配项。这类似于https://stackoverflow.com/a/18899529/4248600。
Disjunction or = Restrictions.disjunction();
for (BarEnum bar : BarEnum.values()) {
if (bar.name().contains(matchStr)) {
or.add(Restrictions.eq("bar", bar));
}
}
criteria.add(or);