2010-12-21 78 views
5

下面的代码是不是为我工作:简单的Hibernate aliasToBean()不工作

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


思考?

回答

8

修正了它。

不得不改变我的投影所以它看起来像这样..

.add(Projections.property("userName"), "userName") 

奇..但无论工作我猜。

5
.add(Projections.property("userName"), "userName"); 

在这种情况下..是正确

aliasToBean()方法创建一个使用ResultTransformer,将经由属性方法或字段注入混叠值到UserSummary类的实例。 add()方法的第二个参数是指定属性别名的位置。这里你已经指定了'userName',它是UserSummary类中预计属性将被映射到的属性。这就是为什么它在一开始就不起作用。 Hibernate的lib不知道什么UserSummary字段/设置器来映射属性。拿出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类的都的userNameuserFullName UserSummary类的都使用相同的类型你很好走。