如何从多个实体Hibernate中获取标准 [英] How to have criteria from multiple entities Hibernate

查看:112
本文介绍了如何从多个实体Hibernate中获取标准的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述



  @Entity 
@Table(name =titul)
public class Titul {
@OneToMany(mappedBy =titul)
private Set< Autorstvo> autorstvo;

@Column(name =nazov)
private String nazov;

$ b $实体
@Table(name =autorstvo)
public class Autorstvo {
@ManyToOne
@JoinColumn(name =id_autor)
私人作者autor;

$ b $实体
@Table(name =autor)
public class Autor {
@Column(name =meno)
private String meno;

@OneToMany(mappedBy =autor)
私人设置< 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标准条件?

解决方案

这解决了我的问题:

Hibernate Criteria加入3个表



忘记将别名添加到标准创建中


获取模式只表示该协会必须提取。如果
想要为关联的实体添加限制,则必须创建一个
别名或一个子标准。我通常更喜欢使用别名,但是YMMV:

  Criteria c = session.createCriteria(Dokument.class,dokument); 
c.createAlias(dokument.role,role);默认情况下为内部连接
c.createAlias(role.contact,contact);
c.add(Restrictions.eq(contact.lastName,Test));
返回c.list();

这当然在Hibernate参考手册中有很好的解释,
Criteria的javadoc甚至有例子。阅读文档:
有很多有用的信息。



I have entities like this:

@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;
}

And i want to have SELECT by criteria Titul.nazov and Autor.meno

So far i did this in 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();

But It always ends when trying to execut critT.list()

What am I doing wrong? How can i add JOINed criterias to criteria in Hibernate?

解决方案

This solved my problem:

Hibernate Criteria Join with 3 Tables

Forgot to add alias to criteria creation also

The fetch mode only says that the association must be fetched. If you want to add restrictions on an associated entity, you must create an alias, or a subcriteria. I generally prefer using aliases, but 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();

This is of course well explain in the Hibernate reference manual, and the javadoc for Criteria even has examples. Read the documentation: it has plenty of useful information.

这篇关于如何从多个实体Hibernate中获取标准的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆