在 JPA 中,如何将表映射到复合实体



有时你有一个包含大量字段的巨大实体,最好将实体拆分为单独的类来处理复杂性。

假设我有一个带列的表 Foo。

someStuff, aThingBlah, aThingEtc, bThingWhatever, bThingBacon

和这个类(注释省略)

class Foo {
  String someStuff;
  String aThingBlah;
  String aThingEtc;
  String bThingWhatever;
  String bThingBacon;
}

我想重构它(不更改数据库表)到

class Foo {
  String someStuff;
  AThing aThing;
  BThing bThing;
}
class AThing {
  String blah;
  String etc;
}
class BThing {
  String whatever;
  String bacon;
}

是否有可能这样做以及如何做到这一点?

以下是基础知识...

class Foo {
  String someStuff;
  @Embedded
  @AttributeOverrides({
     @AttributeOverride( name = "blah", column = @Column(name="aThingBlah") ),
     ...
  })
  AThing aThing;
};
@Embeddable
class AThing {
  @Column(...)
  String blah;
}
我认为

这是不可能的。 哪一个持有 ID? 听起来它们都会共享相同的ID,因此休眠不知道如何加载或保存其中任何一个。(没有某种鉴别器)

另外,如果我要保存一个BThing,那么Foo中定义的字段会发生什么,*Athing*? 它们将完全超出休眠范围。

最新更新