从不同的表中映射一对多

时间:2014-09-30 00:34:02

标签: hibernate jpa orm

当前设置:

Entity A:

fieldA; 
@OneToMany(mappedBy="fieldA")
List<B> Bs;


Entity B:

fieldA;
fieldB;
fieldX;

实体A映射到表A,实体B映射到表B.fieldA是表A的主键,fieldA&amp; fieldB组成表B的复合主键

问题是,当我们使用此设置加载A时,我们会在B列表中找回数千个对象,而我们只关心字段B在实体B中的值。为了节省内存,我们希望有List FieldBs而不是实体A中的B列表,完全摆脱了实体B类。

所以看起来更喜欢这个

Entity A:

fieldA; 
List<fieldB> Bs;

这可能吗?嗯,我当然希望如此,但我不确定如何。 @SecondaryTable是否带有注释:

@SecondaryTables({
    @SecondaryTable(name="Table B", pkJoinColumns={
            @PrimaryKeyJoinColumn(name="fieldA")}
    )

@JoinColumn(name="fieldB", table="Table B")
List<fieldB> Bs;

诀窍?问题是我仍然希望拥有@OneToMany关系映射,所以我想我也需要在某个地方包含它。

为了清楚起见,我想从我的Java代码中删除B类,并将fieldB移到A类,保持@OneToMany关系。但仍然可以阅读List并将其保存回表B.

1 个答案:

答案 0 :(得分:0)

这就是Hibernate的工作原理。默认情况下,它将加载对象的所有属性(除了延迟加载的集合)。 您的应用程序内存是否如此受限,以至于您希望在此级别进行优化?

只有在编写使用costum HQL填充的包装类时,才能提出要求。

这些是你可以做的事情:

  • 使用lazy property fetching忽略不需要的字段。
  • 使用自定义HQL查询,该查询仅返回您的自定义对象 必填项目。 Link