Hibernate实体查询中的位功能

时间:2011-09-18 22:15:58

标签: java mysql hibernate seam

是否可以在使用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: '&'

1 个答案:

答案 0 :(得分:0)

我最终重构了表,有7个布尔字段而不是#34;天"的单个整数。这使得命令行查询也更容易。

虽然知道处理位字段查询的方法仍然很好。