[英]Hibernate Like Criteria on Enum field
给定一个休眠实体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的值是否包含某些String 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
调用时java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Enum
。
这样的查询只有在使用String值而不是序数来持久化枚举的情况下才有可能-但是即使那样,我也不希望标准API一定要支持枚举的like。
您可以查找名称中包含“ 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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.