如何从多个实体Hibernate获得标准

时间:2014-04-30 18:14:11

标签: java hibernate hibernate-criteria

我有这样的实体:

@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标准?

1 个答案:

答案 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甚至都有例子。阅读文档:它   有很多有用的信息。