Java 多工单关系反向端的项目列表

Java 多工单关系反向端的项目列表,java,hibernate,jpa,Java,Hibernate,Jpa,所以我有一个文档,在我的数据库中有修订。文档表包含文档的通用元数据,修订版包含内容。目前,我可以获得具有正确版本的文档 我想做的是通过映射获得所有修订的文档列表 这是我的两个实体: @Entity public class Document { @Id @Column(name="DOCUMENT_ID") private int id; @ManyToOne @JoinColumn(name="DOCUMENT_REVISION_ID") private

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

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

这是我的两个实体:

@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
实体

您需要添加一个
列表
,它将表示与
文档
实例关联的所有修订。。。例如:

@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<>();
}
@实体
公共类文档{
@身份证
@列(name=“DOCUMENT\u ID”)
私有int-id;
@许多酮
@JoinColumn(name=“文件修订号”)
private DocumentRevisionEntity revision;//这是最后一次修订!
@独身癖
@JoinColumn(name=“DOCUMENT_ID”)//单向一对多,适用于JPA2.0!!
私有列表修订=新建ArrayList();
}
然后,当您从持久性层检索文档时,还可以检索其关联的修订

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

如果不想修改实体。。。您可以测试此查询:

选择文档,从文档中进行修订,文档修订实体修订,其中doc.id=rev.documentId


但是,当您从此查询调用:
query.getResultList()
时;它将带来一个
列表
,其中每个元素由一个数组组成:数组[0]=文档,数组[1]=文档修订实体。。。如果有多个版本的文档,这些文档将在结果列表中重复…

您所说的:“
list
所有修订版”是什么意思??你的意思是获取一份文档列表,包括每个文档的不同修订版本吗?@CarlitosWay是的,很抱歉我会解决这个问题,但我想获取所有修订版本,但将它们作为
document
获取。我不能很好地理解。。。这可能是您想要的:
选择doc.revision所在的文档文档(listOfRevisions)
?如果是,我可以详细说明一种伪查询,如:
selectdocumentfromrevision
。通常你会有一个
列表
,其中有一个文档作为子文档,但我想知道你是否也可以这样做。练习是尝试不添加其他属性,但如果必须,我会,只是一个思想实验,让我测试该查询,看看会发生什么,然后我会报告。