以下代码对我不起作用:
List results = getSession().createCriteria(User.class)
.setProjection(Projections.projectionList()
.add(Projections.property("userName"))
)
.setResultTransformer(Transformers.aliasToBean(UserSummary.class))
.list();
Run Code Online (Sandbox Code Playgroud)
有趣的是,如果我删除了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;
}
}
Run Code Online (Sandbox Code Playgroud)
思考?
固定它.
不得不改变我的投影,所以看起来像这样..
.add(Projections.property("userName"), "userName")
Run Code Online (Sandbox Code Playgroud)
奇怪......但是无论有什么用,我猜.
小智 5
.add(Projections.property("userName"), "userName");
Run Code Online (Sandbox Code Playgroud)
.. 在这种情况下是正确的.
该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;
}
Run Code Online (Sandbox Code Playgroud)
的add()方法将是如下:
.add(Projections.property("userName"), "userFullName");
Run Code Online (Sandbox Code Playgroud)
只要User类的userName和UserSummary类的userFullName都使用相同的类型,就可以了.
| 归档时间: |
|
| 查看次数: |
3425 次 |
| 最近记录: |