Tôi có 2 thực thể nhưHibernate Tham gia sử dụng các tiêu chí và những hạn chế
PayoutHeader.java
@Entity
public class PayoutHeader extends GenericDomain implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column
private Integer month;
@Column
private Integer year;
@OneToOne
private Bank bank;
@Column
private Double tdsPercentage;
@Temporal(javax.persistence.TemporalType.DATE)
private Date **chequeIssuedDate**;
@Temporal(javax.persistence.TemporalType.DATE)
private Date entryDate;
}
PayoutDetails java
@Entity
public class PayoutDetails {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@ManyToOne
private PayoutHeader payoutHeader;
@Column
private Double amount;
@Column
private String bankName;
@Temporal(javax.persistence.TemporalType.DATE)
private Date clearingDate;
@OneToOne
private Advisor advisor;
@Column
private Long **advisorId**;
}
Tôi muốn viết truy vấn sử dụng Tiêu chuẩn Hibernate như
Select pd.* from PayoutDetails pd, PayoutHeader ph where pd.payoutheaderId = ph.id and pd.advisorId = 1 and and ph.chequeIssuedDate BETWEEN STR_TO_DATE('01-01-2011', '%d-%m-%Y') AND STR_TO_DATE('31-12-2011', '%d-%m-%Y') ";
Tôi đã viết truy vấn như thế này
public List<PayoutDetails> getPayoutDetails(AdvisorReportForm advisorReportForm) {
Criteria criteria = getSession().createCriteria(PayoutDetails.class);
if (advisorReportForm.getAdvisorId() != null && advisorReportForm.getAdvisorId() > 0) {
criteria.add(Restrictions.eq("advisorId", advisorReportForm.getAdvisorId().toString()));
}
criteria.setFetchMode("PayoutHeader", FetchMode.JOIN)
.add(Restrictions.between("chequeIssuedDate", advisorReportForm.getFromDate(), advisorReportForm.getToDate()));
return criteria.list();
}
Nhưng là cho lỗi như
org.hibernate.QueryException: không thể giải quyết bất động sản: chequeIssuedDate của: org.commission.domain. payout.PayoutDetails
Tôi nghĩ là đang cố gắng tìm trường chequeIssuedDate
trong PayoutDetails
, nhưng lĩnh vực này là trong PayoutHeader
. Làm cách nào để chỉ định bí danh trong khi tham gia?
Tôi đã cố gắng Giải pháp đầu tiên do bạn cung cấp, nó cho lỗi là "org.hibernate.QueryException: không thể giải quyết thuộc tính: payoutHeader của: org.commission.domain.payout.PayoutDetails" –
Cảm ơn Don Roby :) Phương pháp tiếp cận thứ hai hoạt động . –
Khi tôi in SQL được tạo ra trong nguyên nhân lựa chọn, nó có tất cả các cột từ cả hai bảng, tôi chỉ cần các cột từ bảng PayoutDetails. Làm thế nào để thiết lập chiếu cho điều này? –