我有一个场景,我必须通过java将null
传递给SQL参数,但我得到SQLGrammarException
。如果我传递一些价值,它工作正常。如果我错了,请指导。
以下是我的代码:
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 Developer所做的,它运行良好:
SELECT *
FROM table(package.func(travel_type => travel_search_type(
travel_place_no => NULL))) ;
请指导。
答案 0 :(得分:3)
在调用方法的2个参数签名时,null不是允许的值。相反,您可以使用指定数据类型的3参数签名setParameter(String name, Object val, Type type),它应该可以工作。
修改强>
好的,我发现还有另一个问题:即使替换者工作,你要执行的是a >= NULL
。在这种情况下,我担心您将不得不手动处理StringBuffer创建。也许只是在没有参数的情况下强制一个总是假的条件,如果它是null,比如`1!= 2',否则就像你在你的sql例子上那样处理它(写手工' NULL'而不是参数占位符)。