【发布时间】:2015-05-02 00:20:48
【问题描述】:
我有两张桌子
Loan (id, amount, duration)
LoanStatus(id, status, loan_id) // just an example, but it has lot more fields in this table
Loan.java
public class Loan{
private int id;
private int amount;
private int duration;
private LoanStatus loanStatus;
// getter and setters
}
LoanStatus.java
public class LoanStatus{ // just an example, but it has many fields than what actually given
private int id;
private String status;
private Loan loan;
//getter and setters
}
现在我只想使用 Projections 获得 amount 、 duration 、 loanStatus.status 。我已经使用createAlias() 成功获取了该特定列,但是将其设置为 setter 时会出现问题。
Criteria criteria = getSession().createCriteria(Loan.class,"loan");
criteria.createAlias("loan.loanStatus", "loanStatus")
.setProjection(Projections.projectionList().add(Projections.property("id"),"id")
.add(Projections.property("amount"),"amount")
.add(Projections.property("duration"),"duration")
.add(Projections.property("loanStatus.status"), "loanStatus"))
.add(Restrictions.eq("id", id))
.setResultTransformer(Transformers.aliasToBean(Loan.class));
return criteria.list();
我的错误如下。
IllegalArgumentException occurred while calling setter for property [com.site.dto.Loan.loanStatus (expected type = com.site.dto.LoanStatus)]; target = [com.site.dto.Loan@4083974a], property value = [Pending]
所以我得到了我预期的列值“Pending”,但问题在于将其设置为 setter 时。我见过很多关于投影的问题,但其中大部分是基于使用投影的限制,而不是使用投影获取孩子的特定列。
【问题讨论】:
标签: java mysql hibernate projection