本文介绍了在Hibernate中使用Transformers.aliasToBean填充子bean的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有下几个bean:
I have the next couple of beans:
Address {
String name;
String number;
String zipcode;
String town;
}
MyEntity {
Address address;
String value1;
String value2;
}
我正在尝试执行下一个Hibernate查询:
I'm trying to do the next Hibernate query:
private final List<String> propertiesDistinct = Arrays.asList("address.name");
private final List<String> properties = Arrays.asList("address.number",
"address.zipcode", "address.town")
ProjectionList projectionList = Projections.projectionList();
if (propertiesDistinct != null) {
ProjectionList projectionListDistinct = Projections.projectionList();
for (String propertyDistinct : propertiesDistinct)
projectionListDistinct.add(Projections.property(propertyDistinct).as(propertyDistinct));
projectionList.add(Projections.distinct(projectionListAgrupar));
}
if (properties != null)
for (String property : properties)
projectionList.add(Projections.property(property).as(property));
criterio.setProjection(projectionList);
// MORE FILTERS ON MyEntity FIELDS
//... criterio.add(Restrinctions...);
// I want to recover the results on my bean MyEntity so I don't have to create a new one
criterio.setResultTransformer(Transformers.aliasToBean(MyEntity.class));
问题:
Problem:
Caused by: org.hibernate.PropertyNotFoundException: Could not find setter for address.name on class com.entities.MyEntity
我明白Hibernate正在寻找类似于以下内容的东西:
I understand that Hibernate is looking for something like:
public String getAddressName() {} // This should be in MyEntity
而不是:
Instead of:
public String getName() {} // In my Address bean
有关如何在不创建新bean的情况下解决这个问题的想法?
Ideas about how can I fix this without creating a new bean?
谢谢!
Thanks!
推荐答案
我编写了一个可以解决您的问题的ResultTransformer。它的名字是AliasToBeanNestedResultTransformer,请在上查看。
I wrote a ResultTransformer that can fix your problem. It's name is AliasToBeanNestedResultTransformer, check it out on github.
这篇关于在Hibernate中使用Transformers.aliasToBean填充子bean的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!