我有两张桌子
Loan (id, amount, duration)
LoanStatus(id, status, loan_id) // just an example, but it has lot more fields in this table
贷款.java
public class Loan{
private int id;
private int amount;
private int duration;
private LoanStatus loanStatus;
// getter and setters
}
贷款状态.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
}
现在我只想得到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”,但问题在于将其设置为设置器时。我见过很多关于投影的问题,但大多数问题都是基于使用投影的限制,但不使用投影获取孩子的特定列。