- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的 HQL 为 select p,c from Person p,ContactCard c where c.fk_pid=p.id
我使用以下代码作为 HQL 执行此查询:
List<Person> personsWithContactCard = new ArrayList<Person>();
List<object[]> quryResult = new ArrayList<object[]>();
String qry = "select p,c from Person p,ContactCard c where c.fk_pid=p.id";
quryResult = session.createQuery(qry).list();
for(object[] obj : quryResult )
{
Person person = new Person();
person = (Person)obj[0];
person.setContactCard = (ContactCard )obj[1];
personsWithContactCard.add(person);
person=null;
}
通过将查询结果放入对象数组列表中并循环查询结果,我填充了人员列表。
但是在阅读了 ResultTransformer
接口(interface)之后,我知道通过这个接口(interface)我可以将 queryResult 转换为所需的列表,因此我将代码更改为:
String qry = "select p,c from Person p,ContactCard c where c.fk_pid=p.id";
personsWithContactCard = session.createQuery(qry).setResultTransformer(new ResultTransformer() {
@Override
public Object transformTuple(Object[] tuple, String[] aliases)
{
Person person = new Person();
person = (Person)obj[0];
person.setContactCard = (ContactCard )obj[1];
return person ;
}
@Override
public List transformList(List collection)
{
return collection;
}
}).list();
此代码为我提供了带有 for 循环的人员列表。
所以我的问题是:transformTuple 和 For 循环有什么区别?两者在性能和处理意义上是否相同?哪个性能更好?
transformList()
有什么用?
更新:
按照 @bellabax 给出的答案中的解释了解 ResultTransformer
的使用后,我对代码做了一个小更改,如下所示:
personsWithContactCard = session.createQuery(qry).setResultTransformer(new ResultTransformer() {
@Override
public Object transformTuple(Object[] tuple, String[] aliases)
{
Person person = new Person();
person = (Person)obj[0];
person.setContactCard = (ContactCard )obj[1];
return person ;
}
@Override
public List transformList(List collection)
{
return null;
}
}).list();
我更改了 transformList()
方法以返回 null
如果执行此代码,我将得到 null personsWithContactCard
列表。为什么当我不使用transformList()
方法时需要返回collection
?当我应该使用 transformList()
和 transformTuple()
时意味着我如何决定使用哪个?
最佳答案
结果通常没有差异,但使用ResultTransformer
:
所以选择是 ResultTransformer
.
关于ResultTransformer.transformList()
:
Here we have an opportunity to perform transformation on the query result as a whole
改为 transformTuple
您只能操作返回集合的一行。
编辑:
正如上面引用的 javadoc ResultTransformer.transformList()
非常清楚:此函数允许修改整个列表以删除重复项、应用类型转换等以及 ResultTransformer.transformList()
的结果转发至Query.list()
方法so,返回null
来自transformList
将返回null
来自list()
.
就是这样Query
和ResultTransformer
并列。
关于java - 查询结果上的transformTuple和For循环之间的区别 - Hibernate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23356783/
我是一名优秀的程序员,十分优秀!