对varchar列使用Hibernate数字限制

时间:2015-05-07 14:57:30

标签: java mysql hibernate criteria

我正在使用Hibernate Criteria来动态构建查询。 其中一个动态查询使用存储在MySQL上的列作为varchar。但是,是一个存储项目价格的列(仅包含带小数的数值)。所以我想使用ge lebetween生成查询。

有没有办法告诉hibernate类似"嘿,这个列是varchar类型,但它的内容是数字的,所以应用我的数字限制(请)"?

2 个答案:

答案 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公式这个元素,而不是我将doublegele应用于这个新变量。我的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/

相关问题