簡體   English   中英

如何使來自多個實體的條件休眠

[英]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條件添加到條件中?

這解決了我的問題:

休眠標准與3個表聯接

也忘記為條件創建添加別名

提取模式僅表示必須提取關聯。 如果要對關聯實體添加限制,則必須創建別名或子條件。 我通常更喜歡使用別名,但是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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM