简单的Hibernate aliasToBean()不起作用

时间:2010-12-21 21:26:48

标签: hibernate

以下代码对我不起作用:

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;
    }
}


想法?

2 个答案:

答案 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 都使用相同的 类型 你很高兴。