是否可以在使用Seam的HibernateEntityQuery的查询中使用位函数?
我刚刚继承了一些基于JSF,Seam和amp;的代码。休眠。现有的DAO代码使用了Seam的HibernateEntityQuery
,特别是它对限制表达式字符串的支持。
到目前为止,此工作正常,但现在我的任务是在考虑位字段的现有查询中添加限制。
Java实体代码使用整数字段来表示一组“天”,通过此枚举:
public enum WEEKDAY {
MONDAY(1), TUESDAY(2), WEDNESDAY(4), THURSDAY(8), FRIDAY(16), SATURDAY(32), SUNDAY(64) ;
private int value;
private WEEKDAY(int value) {
this.value = value;
}
}
此枚举中的整数值存储在int days
字段中的实体中。
例如,如果实体包含MONDAY,WEDNESDAY和FRIDAY,days
将设置为1 | 8 | 16
,== 25
。
现在我想为查询添加一个新的限制,以便(例如)我可以请求天数包括星期一或星期六的实体:1 | 32 == 33
,所以在SQL中,我会这样做:
select id from entity where (select days & 33) > 0;
HibernateEntityQuery
有这样的语法吗?我尝试添加以下限制:
entity.days & #{myQuery.bitwiseMeetingDays} > 0
会导致以下错误:
org.hibernate.QueryException: unexpected char: '&'
答案 0 :(得分:0)
我最终重构了表,有7个布尔字段而不是#34;天"的单个整数。这使得命令行查询也更容易。
虽然知道处理位字段查询的方法仍然很好。