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

时间:2012-05-11 00:59:57

标签: hibernate jpa

有时你有一个拥有众多字段的巨大实体,将实体拆分成单独的类以处理复杂性会很好。

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

someStuff, aThingBlah, aThingEtc, bThingWhatever, bThingBacon

和这个类(注释遗漏)

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

我想将此重构(不更改db表)重构为

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

可以这样做吗?

2 个答案:

答案 0 :(得分:1)

这是基础......

class Foo {

  String someStuff;

  @Embedded
  @AttributeOverrides({
     @AttributeOverride( name = "blah", column = @Column(name="aThingBlah") ),
     ...
  })
  AThing aThing;

};

@Embeddable
class AThing {

  @Column(...)
  String blah;

}

答案 1 :(得分:0)

我认为不可能。哪一个持有身份证?听起来他们都会共享相同的id,因为hibernate不知道如何加载或保存任何这些。 (没有某种鉴别器)

如果我要保存 BThing 那么 Foo 中定义的字段会发生什么,* Athing *?他们将完全脱离冬眠范围。