Hibernate在命名查询中设置参数
我正在尝试编写一个通用方法,它可以获取命名查询,在其中设置命名参数并返回结果。
该方法如下所示,
s = getSession();
q = s.getNamedQuery(nameOfTheQuery);
keySet = queryParams.keySet();
itr = keySet.iterator();
while(itr.hasNext()){
key = itr.next();
//Problem here
q.setParameter(key, queryParams.get(key));
}
q.setMaxResults(maxResults);
q.setFetchSize(fetchSize);
log.info("::>>>> Query result :"+(q.uniqueResult()));
我尝试将命名参数设置为此处的值。但是,当这里的参数恰好是列表或集合时,我会得到一个 ClassCastException
而 q.uniqueResult()
有没有办法我可以编写此方法来支持集合和还有其他类型的参数吗?我必须设置 maxResults 和 fetchSize,因此我必须选择此选项。任何帮助将不胜感激。谢谢!
I am trying to write a generic method that can pick up a named query, set the named parameters in it and return a result.
The method looks like the following,
s = getSession();
q = s.getNamedQuery(nameOfTheQuery);
keySet = queryParams.keySet();
itr = keySet.iterator();
while(itr.hasNext()){
key = itr.next();
//Problem here
q.setParameter(key, queryParams.get(key));
}
q.setMaxResults(maxResults);
q.setFetchSize(fetchSize);
log.info("::>>>> Query result :"+(q.uniqueResult()));
I am trying to set the named parameters to values here. But when the parameter here happens to be a list or collection I get a ClassCastException
while the q.uniqueResult()
Is there a way I can write this method to support collections and other types of parameters as well? It is mandatory that I set the maxResults and fetchSize so I had to choose this option. Any help would be greatly appreciated. Thanks!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您需要使用 setParameterList(key, value) ,其中 vale 是您的列表。
You need to use setParameterList(key, value) where vale is your list.
我怀疑你的问题的答案首先是当参数是列表类型时使用 setParameterList 方法;其次,使用以下技术之一:
使用反射来询问参数的类型,然后相应地使用 setParameter 或 setParameterList 方法。
利用多态性的优势来捕获 List 对象的参数,并为这些参数调用 setParameterList。下面的示例。*
创建一个大条件块来测试转换为一堆列表类型,如果转换则调用 setParameterList,否则调用 setParameter。
(*) 方法 2 的示例。
I suspect the answer to your question is firstly to use the
setParameterList
method when the parameter is a list type; secondly by using one of the following techniques:Use reflection to interrogate the type of your parameters and then use setParameter or setParameterList method accordingly.
Use the benefits of polymorphism to capture parameters that are List objects and call setParameterList for those. Example below.*
Make a big conditional block that tests casting to a bunch of list types and if it casts then call setParameterList, otherwise call setParameter.
(*) Example for approach 2.
如果我正确理解你的问题。
就我而言,我经常使用 q.getResultList 来获取结果的集合。
我认为这可能会帮助您找到解决方案。
If I understand your question correctly.
In my case I often use q.getResultList to get the collection of the result.
I think this may help you to find the solution.