2013-02-05 39 views
0

如果我像這樣運行在Hibernate查詢:沒有爲JDBC類型映射方言:0

sessionFactory.getCurrentSession().createSQLQuery("select 'test' from dual where 1=2").list() 

我得到正確size=(0)

然而,當我運行一個Hibernate查詢是這樣的:

sessionFactory.getCurrentSession().createSQLQuery("select null from dual where 1=2").list() 

我得到一個錯誤說「「不爲JDBC類型映射方言:0」?

我該如何解決這個問題,以便取代結果size =(0)的錯誤?

*編輯*

我配置Hibernate的方言在hibernate.cfg.xml像這樣:

<property name="dialect">org.hibernate.dialect.MySQLDialect</property> 

回答

0

嘗試:

<property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property> 
+0

我試過了,仍然得到了同樣的錯誤。我也嘗試創建自己的方言,它擴展了MySQLDialect並添加了registerHibernateType(Types.NULL,「null」); registerColumnType(Types.NULL,「null」);這兩個都沒有工作。還有其他建議嗎? –

+0

嘗試'hibernate.dialect'而不是'方言' –

+0

同樣的錯誤,但我很肯定你至少花時間。 –

0

我深入到一些意大利麪條需要支持多種數據庫和多種方言的代碼,我不想混淆(MySql,Oracle,MS SqlServer)。該代碼也正在執行本機sql。我能夠成功地取代如下內容:

select null爲required_field,foo from bar;

With

select''as required_field,foo from bar;

這是一個黑客,但它進行了一天。

更好的解決辦法似乎是在這裏討論:

SQLite - No Dialect mapping for JDBC type: 0 (Hibernate)

Sqlite & Hibernate Ex: No Dialect mapping for JDBC type: 0

https://code.google.com/p/hibernate-sqlite/issues/detail?id=3

0

我知道這是一個非常晚的答案,但如果有人確實有同樣的問題: 問題這裏是執行查詢:

sessionFactory.getCurrentSession().createSQLQuery("select null from dual where 1=2").list() 

一個字段與任何表都無關,並且始終設置爲空。 Hibernate依賴結果集元數據構造答案...在這種情況下,元數據返回值爲0的java.sql.SQLType,因爲數據庫不知道數據的類型。

其中一個解決方法是鑄造空值:

sessionFactory.getCurrentSession().createSQLQuery("select CAST(null as char) from dual where 1=2").list() 
相關問題