以下代码对我不起作用:
List results = getSession().createCriteria(User.class)
.setProjection(Projections.projectionList()
.add(Projections.property("userName"))
)
.setResultTransformer(Transformers.aliasToBean(UserSummary.class))
.list();
有趣的是,如果我删除了setResultTransformer()
,我会得到一个返回的用户名列表。
这是我的UserSummary课程:
public class UserSummary {
private String userName;
private String clickUrl;
private Integer id;
public UserSummary() {}
public UserSummary(Integer id, String userName) {
this.id = id;
this.userName = userName;
this.clickUrl = clickUrl;
}
public String getUserName() {
return userName;
}
public String getClickUrl() {
return clickUrl;
}
public void setClickUrl(String clickUrl) {
this.clickUrl = clickUrl;
}
public Integer getId() {
return id;
}
}
想法?
答案 0 :(得分:9)
修正了它。
不得不改变我的投射,所以它看起来像这样..
.add(Projections.property("userName"), "userName")
奇怪..但无论如何,我猜。
答案 1 :(得分:5)
.add(Projections.property("userName"), "userName");
在这种情况下,.. 正确。
aliasToBean()
方法创建一个 ResultTransformer ,它将通过属性方法或字段将别名值注入UserSummary类的实例。 add()
方法的第二个参数是指定投影属性别名的位置。在这里,您指定了'userName',它是UserSummary类中投影属性将映射到的属性。这就是为什么它在第一时间不起作用的原因。 Hibernate lib不知道用于映射属性的UserSummary字段/ setter是什么。取出aliasToBean()
方法,它不会尝试进行任何映射。所以,如果有人:
private String userFullName;
public UserSummary(Integer id, String userFullName) {
this.id = id;
this.userFullName = userFullName;
this.clickUrl = clickUrl;
}
public String getUserFullName() {
return userFullName;
}
add()
方法如下:
.add(Projections.property("userName"), "userFullName");
只要User类的 userName 和UserSummary类的 userFullName 都使用相同的 类型 你很高兴。