【问题标题】:Hibernate Many-to-Many relationship queryHibernate 多对多关系查询
【发布时间】:2011-05-10 09:57:27
【问题描述】:

我有一个 Person 类,每个人都可以拥有特定语言的文档。 Person 和 Document 类通过多对多关系链接。

我的 Java 代码如下所示:

@Table(name="person")
public class Person {
  @Id
  @Column(name="id")
  private Long id;

  @Column(name="name")
  private String name;

  @ManyToMany(targetEntity=Document.class)
  @JoinTable(name="person_document",
    joinColumns={
      @JoinColumn(name="person_id")
    },
    inverseJoinColumns={
      @JoinColumn(name="document_id")
    }
  )
  private List<Document> documents;

  // getter and setter ....
}

public class Document {
  @Id
  @Column(name="id")
  private Long id;

  @Column(name="language")
  private String language;

  // getter and setter ...
}

注意:我在这里使用的是 Hibernate 3。

我想创建一个查询,让我返回所有拥有特定语言文档的人,比如英语。

我的第一次尝试是遵循代码

Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
session.createCriteria(Person.class)
  .createAlias("documents", "d")
  .add(Restrictions.eq("d.language", "english")
  .list();

此代码仅列出拥有英文文档的人我想要所有人,但每个人只需要英文文档。

例如:

  • A 有英文文档 X
  • B 拥有法文和英文文件 Y(实际上是 2 个文件)
  • C 有法语文档 Z

我想上市:

  • 人员 A 持有英文文档 X
  • B 人持有英文文档 Y
  • 没有文件的人 A

这有意义吗?如果是这样,Hibernate 查询会是什么样子。

因为这真的很难做到,所以我认为这是错误的方法,但我不知道有其他方法可以做到这一点。

感谢您的帮助!

【问题讨论】:

    标签: java hibernate many-to-many


    【解决方案1】:

    反之亦然。这意味着您应该加载英文文档,并从该文档对象中获取人员。

    Session session = HibernateUtil.getSessionFactory().getCurrentSession();
    session.beginTransaction();
    session.createCriteria(Documentn.class)
      .createAlias("documents", "d")
      .add(Restriction.eq("d.language", "english")
      .list();
    

    【讨论】:

      猜你喜欢
      • 2015-07-20
      • 2010-09-20
      • 2010-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-09
      • 2021-10-03
      • 2018-11-02
      相关资源
      最近更新 更多