【发布时间】:2011-10-06 14:47:10
【问题描述】:
我有一个非常基本的问题。假设我有一个类层次结构 A class B extends class A)。两者都是 bean 并由 hibernate 保存到数据库中。要映射层次结构,目前我知道两种方法:
- 都在同一张表中:A 和 B 将保存在一张表中,
type字段将识别条目是来自 A 类型还是 B 类型。 - 每种类型一个表:当一个 B 对象被保存时,Hibernate 会将它放到 B 表中,同时也会在 A 表中创建一个条目。 ID 将相同,以确保它是一个对象。
现在我想将这两者结合起来:每当我保存类型 B 的对象时,它应该写入 B 表以及 A 表。但是A表中也应该有一个字段“type”,其中显示了每个条目的类型。
我已经在class A 中使用以下注释进行了尝试:
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn(name = "type", discriminatorType = DiscriminatorType.STRING)
第一个定义每个对象将被保存到单独的表中,第二个应该将类型写入type-Field。
Class B 有这个注解:
@DiscriminatorValue("B")
但不幸的是,这不起作用。当我想在 A 表中插入一个 A 对象时,它会保存这个条目两次,然后给出一个密钥已被使用的错误。所以我想这不是正确的方法。
有人可以帮我吗?我发现的教程对我来说相当混乱,因为我对这个主题很陌生。此外,大多数解释使用 XML 文件而不是注释。
【问题讨论】:
标签: hibernate inheritance jpa