У меня есть вопрос о спящем запросе. Я использую hiberate 5.3.10.
Прежде всего, у меня есть домен Parent. java, ParentAlert. java и ParentAlertDetail. java как следует:
Parent:
public class Parent {
private String parentId;
private List<ParentAlert> parentAlerts;
@Id
@Column(name = "Parent_id", length = 12)
public String getParentId() {
return parentId;
}
public void setParentId(String parentId) {
this.parentId = parentId;
}
@OneToMany(
targetEntity = ParentAlert.class,
mappedBy = "parentAlert",
fetch = FetchType.LAZY)
public List<ParentAlert> getParentAlerts() {
return parentAlerts;
}
public void setParentAlerts(List<ParentAlert> parentAlerts) {
this.parentAlerts = parentAlerts;
}}
ParentAlert:
public class ParentAlert {
private String parentAlertID;
private Parent parent;
private Collection<ParentAlertDetail> parentAlertDetails;
private String status;
@Id
@Column(name = "Parent_Alert_ID", length = 12)
@NotEmpty
public String getParentAlertID() {
return parentAlertID;
}
public void setParentAlertID(String parentAlertID) {
this.parentAlertID = parentAlertID;
}
@OneToOne(targetEntity = Parent.class, fetch = FetchType.LAZY)
@JoinColumn(name = "Parent_id")
public Parent getParent() {
return parent;
}
public void setParent(Parent parent) {
this.parent = parent;
}
@OneToMany(targetEntity = ParentAlertDetail.class, mappedBy = "id.parentAlert", fetch = FetchType.LAZY, cascade = {
CascadeType.ALL })
public Collection<ParentAlertDetail> getParentAlertDetails() {
return parentAlertDetails;
}
public void setParentAlertDetails(Collection<ParentAlertDetail> parentAlertDetails) {
this.parentAlertDetails = parentAlertDetails;
}
@Column(name = "status", nullable = false, length = 1)
public String getStatus() {
return this.status;
}
public void setStatus(String status) {
this.status = status;
}}
ParentAlertDetail
public class ParentAlertDetail{
private ParentAlertDetailID id;
private String desc;
private String status;
@EmbeddedId
@AttributeOverrides(value = { @AttributeOverride(name = "parentAlert", column = @Column(name = "Parent_Alert_Id")),
@AttributeOverride(name = "parentAlertDetailId", column = @Column(name = "Parent_Alert_Detail_id")) })
public ParentAlertDetailID getId() {
return id;
}
public void setId(ParentAlertDetailID id) {
this.id = id;
}
@Column(name = "desc", length = 100)
public String getDesc() {
return this.desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
@Column(name = "Status", length = 1)
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}}
ParentAlertDetailID
public class ParentAlertDetailID{
private Integer parentAlertDetailId;
private ParentAlert parentAlert;
@Column(name = "Parent_Alert_Detail_id")
@NotEmpty
public Integer getParentAlertDetailId() {
return parentAlertDetailId;
}
public void setParentAlertDetailId(Integer parentAlertDetailId) {
this.parentAlertDetailId = parentAlertDetailId;
}
@ManyToOne(targetEntity = ParentAlert.class, fetch = FetchType.LAZY)
@JoinColumn(name = "Parent_Alert_ID", nullable = true)
public ParentAlert getParentAlert() {
return parentAlert;
}
public void setParentAlert(ParentAlert parentAlert) {
this.parentAlert = parentAlert;
} }
Я хочу отфильтровать parentAlert.status = ' A 'and parentAlertDetail.status =' A '.
Запрос
String sql = "SELECT distinct parent FROM Parent parent"
+ " LEFT OUTER JOIN fetch parent.parentAlerts patientAlert"
+ " LEFT OUTER JOIN patientAlert.patientAlertDetails patientAlertDetail"
+ " WHERE (patientAlert.status ='A' or patientAlert.status is null) "
+ " and (patientAlertDetail.status ='A' or patientAlertDetail.status is null)";
Query query = getCurrentSession().createQuery(sql);
List<Parent> resultList = query.getResultList();
Однако я обнаружил, что записи в PatientAlertDetail не могут быть отфильтрованы (это означает, что PatientAlertDetail.status =' I 'также выбраны записи)
Могу ли я спросить что-то неправильное в моем запросе или домене?
Кроме того, возможно ли получить все таблицы в родительском домене, не используя выборку в запросе? Это потому, что у меня есть несколько дочерних доменов в Parent (например, ParentContact et c)
Спасибо.