如何比较使用条件限制保存为字符串/ varchar的各种类型(整数,字符串,布尔值...)值?

时间:2014-08-14 16:42:01

标签: hibernate criteria restriction

所以我现在将各种字段类型保存为DB中的字符串(在hbm文件中)/ varchar值。这些类型包括日期,布尔,整数,字符串等......

因此使用它来进行查询:

            Integer value=12;
            String value="hello";
            Calendar value= Calendar.getInstance();
            Boolean value=Boolean.TRUE;
            fieldCriteria=Restrictions.gt(fieldInstValue, valor);

其中fieldInstValue是字段列,并且值为im搜索的值。 如果我将不同类型的值作为值传递,例如整数,布尔值或日历类型作为值参数,考虑到所有内容都作为字符串/ varchar保存在数据库中,它会将整数作为真正的int值进行比较,会发生什么?那么布尔值或日历/日期java类型呢?它会尝试首先将字符串值转换为这些类型吗?

1 个答案:

答案 0 :(得分:1)

如果你这样做,你会看到

ClassCastException.

Hibernate不会尝试转换任何东西,你必须自己动手。

对于Interger,布尔你可以String.valueOf()

对于日期,您必须使用日期格式化程序(SimpleDateFormat)以与存储在db中相同的方式格式化日期,然后您可以在条件中使用。

我不知道你为什么要把所有东西都存储成字符串,如果你这样做,只有正确的工作是等于,休息,即小于,大于,它只是词汇比较字符串。即"A" < "B" = True

这是一个例子

SELECT * FROM `some_table` WHERE valor < "2";

这将返回以小于2开头的所有记录,其中包括“12”,“1222222”。它不是比较整数,只是比较String