gpt4 book ai didi

java - ManyToOne 关系背面的项目列表

转载 作者:行者123 更新时间:2023-11-30 10:41:04 27 4
gpt4 key购买 nike

所以我的数据库中有一份文档有修订。文档表包含文档通用的元数据,修订版包含内容。目前我可以获得正确修订的文档。

我想做的是通过映射的所有修订获取文档列表。

这是我的两个实体:

@Entity
public class Document {
@Id
@Column(name="DOCUMENT_ID")
private int id;

@ManyToOne
@JoinColumn(name="DOCUMENT_REVISION_ID")
private DocumentRevisionEntity revision;
}

@Entity
public class DocumentRevisionEntity {
@Id
@Column(name="DOCUMENT_REVISION_ID")
private int id;

@Column(name="DOCUMENT_ID")
private int documentId
}

那么我想查询所有修订的哪种 JPA 查询,但返回类型为 Document

最佳答案

做你想做的最简单的方法是修改你的 Document实体。

您需要添加 List<DocumentRevisionEntity>它将代表与 Document 相关的所有修订实例...示例:

@Entity
public class Document {
@Id
@Column(name="DOCUMENT_ID")
private int id;

@ManyToOne
@JoinColumn(name="DOCUMENT_REVISION_ID")
private DocumentRevisionEntity revision; // This is the last revision!

@OneToMany
@JoinColumn(name="DOCUMENT_ID") // unidirectional one-to-many, works for JPA2.0!!
private List<DocumentRevisionEntity> revisions = new ArrayList<>();
}

然后当您从持久层检索文档时,您还可以检索其关联的修订版!

注意! 默认情况下,@OneToMany 关系是惰性的,只有在需要时才会加载! (这是,当您从 getRevisions() 管理的 Document 实体调用方法 EntityManager 时)。根据您的上下文,此配置可能会导致 N+1子选择问题,所以要小心。

如果您不想修改您的实体...您可以测试这个查询:

SELECT doc, rev FROM Document doc, DocumentRevisionEntity rev WHERE doc.id = rev.documentId

但是,当您调用:query.getResultList()从这个查询;它会带来 List<Object[]>其中每个元素由一个数组组成,如:array[0] = Document, array[1] = DocumentRevisionEntity ...如果有多个版本的文档,这些文档将在结果列表中重复...

关于java - ManyToOne 关系背面的项目列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38645634/

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