gpt4 book ai didi

java - Hibernate多对多关系查询

转载 作者:行者123 更新时间:2023-11-30 05:03:16 26 4
gpt4 key购买 nike

我有一个 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 查询会是什么样子。

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

感谢您的帮助!

最佳答案

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

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

关于java - Hibernate多对多关系查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5948325/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com