【发布时间】:2010-10-24 11:08:32
【问题描述】:
我有一个无法更改的旧架构。我正在使用通用功能的基类,它包含一个嵌入式对象。有一个字段通常映射在嵌入对象中,它只需要在一个(许多)子类的持久性 ID 中。我创建了一个包含它的新 id 类,但随后我收到该字段被映射两次的错误。下面是一些示例代码,为了保持读者的理智而大大简化了:
@MappedSuperclass
class BaseClass {
@Embedded
private Data data;
}
@Entity
class SubClass extends BaseClass {
@EmbeddedId
private SubClassId id;
}
@Embeddable
class Data {
private int location;
private String name;
}
@Embeddable
class SubClassId {
private int thingy;
private int location;
}
我已经尝试过@AttributeOverride,但我只能让它重命名该字段。我尝试将其设置为可更新 = 假,可插入 = 假,但这在 @AttributeOverride 注释中使用时似乎不起作用。有关此问题的解决方案,请参见下面的答案。
我意识到我可以更改基类,但我真的不想拆分嵌入对象以分隔共享字段,因为这会使周围的代码更加复杂并且需要一些丑陋的包装代码。我也可以为这种极端情况重新设计整个系统,但我真的不想这样做。
我使用 Hibernate 作为我的 JPA 提供程序。
【问题讨论】:
标签: java database orm jpa mapping