Hibernate 从不同的表映射一到多
当前设置: 与 玩这个把戏?问题是我仍然想要@OneToMany关系映射,所以我想我也需要在某个地方包含它Hibernate 从不同的表映射一到多,hibernate,jpa,orm,Hibernate,Jpa,Orm,当前设置: 与 玩这个把戏?问题是我仍然想要@OneToMany关系映射,所以我想我也需要在某个地方包含它 为了清楚起见,我想从Java代码中去掉类B,并将字段B移动到类A,以维护@OneToMany关系。但仍然能够读取列表并将其保存回表B。这就是Hibernate的工作方式。默认情况下,它将从延迟加载的集合中加载objectsapart的所有属性。 您的应用程序内存是否如此有限,以至于您希望在此级别进行优化 只有当您编写用costum HQL填充的包装器类时,您才会提出这个问题 以下是您可以做
为了清楚起见,我想从Java代码中去掉类B,并将字段B移动到类A,以维护@OneToMany关系。但仍然能够读取列表并将其保存回表B。这就是Hibernate的工作方式。默认情况下,它将从延迟加载的集合中加载objectsapart的所有属性。 您的应用程序内存是否如此有限,以至于您希望在此级别进行优化 只有当您编写用costum HQL填充的包装器类时,您才会提出这个问题 以下是您可以做的一些事情: 用于忽略不需要的字段。 使用自定义HQL查询,该查询返回仅包含 必填字段。
您是说不编写包装器类就不可能做到这一点吗?FieldB只是一个原语。从内存方面来说,返回fieldB比返回fieldB的包装类更有益。我们正在将数十万个对象重新放回该列表中,因此内存是一个问题。为了清楚起见,我想从Java代码中去掉类B,并将字段B移动到类a,以维护@OneToMany关系。但仍然能够阅读列表并将其保存回表B。是的,这就是我要说的。如果你想在这个优化级别上工作,那么完全避免休眠!此外,在内存中加载数十万条记录不是一个好主意,您通常对这种情况使用分页。我发现很难相信这是不可能的。通过使用SecondaryTable注释,我们可以从不同实体中的另一个表中获取任何属性,无需包装。这里唯一的区别是我们需要@OneToMany关系中的属性列表。
Entity A:
fieldA;
@OneToMany(mappedBy="fieldA")
List<B> Bs;
Entity B:
fieldA;
fieldB;
fieldX;
Entity A:
fieldA;
List<fieldB> Bs;
@SecondaryTables({
@SecondaryTable(name="Table B", pkJoinColumns={
@PrimaryKeyJoinColumn(name="fieldA")}
)
@JoinColumn(name="fieldB", table="Table B")
List<fieldB> Bs;