[英]How to restrict Hibernate to generate SQL query with columns only from root entity in Criteria API involving multiple entities
[英]How to have criteria from multiple entities Hibernate
我有這樣的實體:
@Entity
@Table(name = "titul")
public class Titul {
@OneToMany(mappedBy = "titul")
private Set<Autorstvo> autorstvo;
@Column (name = "nazov")
private String nazov;
}
@Entity
@Table(name = "autorstvo")
public class Autorstvo {
@ManyToOne
@JoinColumn(name="id_autor")
private Autor autor;
}
@Entity
@Table(name = "autor")
public class Autor {
@Column (name = "meno")
private String meno;
@OneToMany(mappedBy = "autor")
private Set<Autorstvo> autorstvo;
}
我想按條件Titul.nazov和Autor.meno進行SELECT
到目前為止,我在Hibernate中做到了:
Criteria critT = session.createCriteria(Titul.class);
critT.add(Restrictions.like("nazov", titul));
critT.createAlias("titul.autorstvo", "autorstvo");
critT.createAlias("autorstvo.autor", "autor");
critT.add(Restrictions.ilike("autor.meno", autor));
critT.list();
但是它總是在嘗試執行critT.list()時結束
我究竟做錯了什么? 如何在Hibernate中將JOINed條件添加到條件中?
這解決了我的問題:
也忘記為條件創建添加別名
提取模式僅表示必須提取關聯。 如果要對關聯實體添加限制,則必須創建別名或子條件。 我通常更喜歡使用別名,但是YMMV:
Criteria c = session.createCriteria(Dokument.class, "dokument"); c.createAlias("dokument.role", "role"); // inner join by default c.createAlias("role.contact", "contact"); c.add(Restrictions.eq("contact.lastName", "Test")); return c.list();
當然,這在Hibernate參考手冊中有很好的解釋,並且Criteria的javadoc甚至包含示例。 閱讀文檔:它具有大量有用的信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.