在ORACLE中CHAR类型的字段值会自动补足空格所以当其作为条件时就有可能查不出想要的数据
如果不允许改DB设计的话那就用RTRIM来解决吧例
DB
CREATETABLETEST
(
TEST_IDVARCHAR()NOTNULL
TEST_CHARCHAR()
CONSTRAINTTEST_IDPRIMARYKEY(TEST_ID)
);
INSERTINTOTESTVALUES(a);
测试代码
Sessionsession=factorygetCurrentSession();
sessionbeginTransaction();
Listlist=sessioncreateQuery(FROMTestWHERERTRIM(TEST_CHAR)=a)list();
sessionclose();
assertTrue(listsize()>);
输出结果(ORACLE)
Hibernate:
select
test_TEST_IDasTEST__
test_TEST_CHARasTEST__
from
TESTtest_
where
rtrim(TEST_CHAR)=a
::DEBUGStringType:returningascolumn:TEST__
::DEBUGStringType:returningaascolumn:TEST__
而MySQL不会自动补足空格同样的代码也是可以适用的输出结果(MySQL)
Hibernate:
select
test_TEST_IDasTEST__
test_TEST_CHARasTEST__
from
TESTtest_
where
rtrim(TEST_CHAR)=a
::DEBUGStringType:returningascolumn:TEST__
::DEBUGStringType:returningaascolumn:TEST__