昨天出了一個(gè)奇怪的問題,hibernate通過實(shí)體Id(char(10)型)取得數(shù)據(jù),session.find("from TableName where id=?","value");取不到數(shù)據(jù),但數(shù)據(jù)庫(kù)里是有這個(gè)條數(shù)據(jù)。真奇怪,后來用pl/sql看數(shù)據(jù)庫(kù),鼠標(biāo)點(diǎn)到Id那時(shí),可以看到內(nèi)容后面還有一些空格,帶著期望與質(zhì)疑把字段里的值自制過來, session.find("from TableName where id=?","value ");后發(fā)現(xiàn)可以。我特別試了下connection.createStatement("select * from table_name where id='value'");則正常取數(shù)據(jù),session.find("from TableName where id=?","value");而卻找不到數(shù)據(jù),然后又試了下
ptmt = connection.prepareStatement(select * from table_name where id=?");
ptmt.setString(1,"year");
這樣也不行,以是結(jié)論是:jdbc驅(qū)動(dòng)PrepareStatement對(duì)char字段類型的查找問題,因?yàn)閔ibernate是用PrepareStatement的,自然,hibernate對(duì)char對(duì)應(yīng)的屬性條件查找出現(xiàn)找不到的情況,
解決辦法是:
1.屬性用TRIM函數(shù)處理:session.find("from TableName where TRIM(id)=?","value");
2.char改為varchar2類型
今天試了下mysql,它不會(huì)這樣的情況,所以結(jié)論是:Oracle JDBC PreparedStatement的bug(有可能它故意這樣)
posted on 2007-10-17 22:22
流浪汗 閱讀(5566)
評(píng)論(1) 編輯 收藏 所屬分類:
oracle