2016-11-25 118 views
2

我遇到的情况,在我要通过null通过Java中的SQL参数,但我正在逐渐SQLGrammarException。如果我传递一些价值,它工作正常。请指导如果我错了某处。如何将null传递给SQL中的SQL参数?

下面是我的代码:

StringBuffer query; 
    query = new StringBuffer(
    "SELECT * "+ 
     "FROM table(package.func(travel_type => travel_search_type("+ 
      "travel_place_no => :travelPlaceNo"+ 
      ")))"); 
     Query query1 = em.createNativeQuery(query.toString()); 
    query1.setParameter("travelPlaceNo",null); 

    searchresults = query1.getResultList(); 

例外:

org.hibernate.exception.SQLGrammarException

这是我通过SQL开发人员做的,它工作得很好:

SELECT * 
FROM table(package.func(travel_type => travel_search_type(
    travel_place_no => NULL))) ; 

请指导。

+2

还有一个,after:travelPlaceNo - 是复制粘贴错误还是不行? –

+0

我很抱歉这是copuy粘贴而缩进..纠正 – sTg

+1

你看看http://stackoverflow.com/questions/2123438/hibernate-how-to-set-null-query-parameter-value-with- hql? –

回答

3

虽然调用方法的参数2周的签名,null是不是允许值。您可以使用指定数据类型的3参数签名setParameter(String name, Object val, Type type),它应该可以工作。

编辑:

好吧,我看到里面还有另外一个问题:即使replacemente工作,你正在尝试执行是a >= NULL。在这种情况下,恐怕你将不得不手动处理StringBuffer的创建。也许只是强制一个总是假的条件没有参数,如果它的null,像'1!= 2',否则就像你在你的SQL例子(手写'NULL',而不是参数占位符)写处理它。

+0

但是,如果它的数字呢?它会起作用吗? – sTg

+0

数据库中有什么?数?我只是尝试整数,并给它一个去 –

+0

我使用查询query1。我没有找到这些签名。 – sTg

相关问题