【问题标题】:Java Hibernate Criteria select subclassJava Hibernate Criteria 选择子类
【发布时间】:2012-06-20 09:27:44
【问题描述】:

我想使用 Criteria API 通过从搜索值中获取输入来选择实体。一个文档可以有多个收件人。一个接收者有很多子类

@Entity
public class Document implements Serializable {
  @OneToMany(mappedBy="document")
  private List<Recipient> recipients = new ArrayList<Recipient>();


@Entity
public class RecipientAccount extends Recipient {
  String name;

如何选择具有特定名称的 ReciepientAccount 的所有文档? 我需要搜索所有子类并将它们与 OR 连接。有没有优雅的方法?

问候 米

【问题讨论】:

  • 请添加您的注释模型类
  • 你有没有尝试过但没有成功?
  • 这可能会有所帮助 - link
  • 如果您只对链接到 RecipientAccount 子类的文档感兴趣,为什么需要搜索 Recipient 的所有子类?或者你的意思是 RecipientAccount 本身有几个子类?
  • 由于搜索请求,我可能必须搜索 Recipient 的 3 个子类,有时只搜索两个子类。所以我现在反其道而行之,首先分别选择每个子类,然后对收件人使用 IN 查询。我问自己是否有可能指定加入实体的类型。

标签: java hibernate criteria-api


【解决方案1】:

以下应该有效:

Criteria c = session.createCriteria(Document.class, "document");
c.createAlias("document.recipients", "recipient");
c.add(Restrictions.in("recipient.class", Arrays.asList(SubClass1.class, 
                                                       SubClass2.class,
                                                       SubClass3.class)));
c.add(Restrictions.eq("recipient.name", theName));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-17
    • 2013-11-09
    • 2013-07-24
    • 2011-04-08
    • 2016-05-09
    • 2013-05-10
    • 1970-01-01
    • 2017-03-15
    相关资源
    最近更新 更多