Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate 从不同的表映射一到多_Hibernate_Jpa_Orm - Fatal编程技术网

Hibernate 从不同的表映射一到多

Hibernate 从不同的表映射一到多,hibernate,jpa,orm,Hibernate,Jpa,Orm,当前设置: 与 玩这个把戏?问题是我仍然想要@OneToMany关系映射,所以我想我也需要在某个地方包含它 为了清楚起见,我想从Java代码中去掉类B,并将字段B移动到类A,以维护@OneToMany关系。但仍然能够读取列表并将其保存回表B。这就是Hibernate的工作方式。默认情况下,它将从延迟加载的集合中加载objectsapart的所有属性。 您的应用程序内存是否如此有限,以至于您希望在此级别进行优化 只有当您编写用costum HQL填充的包装器类时,您才会提出这个问题 以下是您可以做

当前设置:

玩这个把戏?问题是我仍然想要@OneToMany关系映射,所以我想我也需要在某个地方包含它


为了清楚起见,我想从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;