我正在使用Hibernate Criteria来动态构建查询。
其中一个动态查询使用存储在MySQL上的列作为varchar。但是,是一个存储项目价格的列(仅包含带小数的数值)。所以我想使用ge
le
或between
生成查询。
有没有办法告诉hibernate类似"嘿,这个列是varchar类型,但它的内容是数字的,所以应用我的数字限制(请)"?
答案 0 :(得分:2)
同样的问题也发生在我身上。我的解决方案是,我创建了一个//inside bootstrap dropdown
if(source == "xxx"){
el = document.getElementsByClassName('takexxxBtn');
}
else if (source == "yyy"){
el = document.getElementsByClassName('takeyyyBtn');
}
else{
el = document.getElementsByClassName('noActionBtn');
}
$timeout(function() {
angular.element(el).triggerHandler('click');
}, 0);
的新变量,数据类型为Product
。并使用hibernate公式这个元素,而不是我将double
,ge
和le
应用于这个新变量。我的pojo看起来像这样:
between
我的休眠标准如下:
@Column
private String price;
@Formula(value="to_number(price)")
private double newDouble;
我希望这会对你有所帮助。
答案 1 :(得分:1)
您将Hibernate查询转换为SQL。如果底层列是varchar列,我不确定Hibernate可以对它做任何事情。
由于问题出在数据库层,因此一个建议是在数据库中创建一个虚拟列(如果您的数据库支持这样的事情),并将此varchar转换为十进制。
快速Google for MySql建议:
http://mysqlserverteam.com/generated-columns-in-mysql-5-7-5/
然后,您可以将实体中的价格字段作为数字类型映射到此虚拟列,并根据需要进行查询。
如果做不到这一点,你可以创建一个类似的2列视图(id,price),并将price字段映射到现有的Entity作为辅助表。
进一步检查后,我会从MySQL文档中注意以下内容:
http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html
字符串会根据需要自动转换为数字。
因此,您似乎可以执行以下操作。使用类型转换器(JPA 2.1)在String<>之间进行转换域模型中的数字类型。鉴于上述情况,只需使用标准数字运算符对该字段进行查询。
http://www.thoughts-on-java.org/jpa-21-how-to-implement-type-converter/