所以我现在将各种字段类型保存为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类型呢?它会尝试首先将字符串值转换为这些类型吗?
答案 0 :(得分:1)
如果你这样做,你会看到
ClassCastException.
Hibernate不会尝试转换任何东西,你必须自己动手。
对于Interger,布尔你可以String.valueOf()
。
对于日期,您必须使用日期格式化程序(SimpleDateFormat
)以与存储在db中相同的方式格式化日期,然后您可以在条件中使用。
我不知道你为什么要把所有东西都存储成字符串,如果你这样做,只有正确的工作是等于,休息,即小于,大于,它只是词汇比较字符串。即"A" < "B" = True
。
这是一个例子
SELECT * FROM `some_table` WHERE valor < "2";
这将返回以小于2开头的所有记录,其中包括“12”,“1222222”。它不是比较整数,只是比较String
。