我有这样的实体:
@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
到目前为止,我在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标准?
答案 0 :(得分:0)
这解决了我的问题:
Hibernate Criteria Join with 3 Tables
忘记为条件创建添加别名
获取模式仅表示必须获取关联。如果你 想要在关联实体上添加限制,您必须创建一个 别名或子标准。我通常更喜欢使用别名,但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甚至都有例子。阅读文档:它 有很多有用的信息。