2010-12-21 20 views
5

çalışmıyor:Basit hazırda aliasToBean() Aşağıdaki kod benim için çalışmıyor

List results = getSession().createCriteria(User.class) 
    .setProjection(Projections.projectionList() 
      .add(Projections.property("userName")) 
    ) 
    .setResultTransformer(Transformers.aliasToBean(UserSummary.class)) 
    .list(); 


Komik yeterince ben setResultTransformer() kaldırırsanız gerçi adları listesi geri mükemmel iyi döndü olsun.

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


Düşünceler: Burada

benim UserSummary sınıftır?

cevap

8

Düzeltildi.

.. Tek

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

.. böyle görünüyordu yani benim projeksiyon değiştirmek zorunda kaldı ama ne olursa olsun sanırım çalışır.

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

bu durumda doğru ..is.

aliasToBean() yöntemi oluşturduğu mülkiyet yöntemlerle veya alanlar aracılığı UserSummary sınıfın örneklerini içine başka ad değerleri enjekte edeceğini bir ResultTransformer. add() yönteminin ikinci parametresi, öngörülen özellik diğer adı'un belirtildiği yerdir. Burada, proje alanı özelliklerinin eşleneceği UserSummary sınıfındaki özellik olan 'userName' değerini belirttiniz. Bu yüzden ilk durumda işe yaramadı. Hibernate lib, UserSummary alanının/setter'in özelliği ile ne eşleşeceğini bilmiyordu. aliasToBean() yöntemini çıkarın ve herhangi bir eşleme yapmaya çalışmaz. Yani, eğer bir vardı:

private String userFullName; 

public UserSummary(Integer id, String userFullName) { 
    this.id = id; 
    this.userFullName = userFullName; 
    this.clickUrl = clickUrl; 
} 

public String getUserFullName() { 
    return userFullName; 
} 

şöyle add() yöntem olacaktır:

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

sürece UserSummary sınıfın hem userName Kullanıcı sınıfının ve userFullName aynı kullanıyorsunuz tip gitmek güzel.

İlgili konular