【发布时间】:2012-02-20 09:49:42
【问题描述】:
我正在为我的实习开发 JPA 2.0 合规套件...该套件的一部分正在测试极端案例。
JSR-317 在第 360 页上声明“AttributeOverride 注释可以应用于包含可嵌入类实例的元素集合或 其键和/或值是可嵌入类的映射集合。"
那么,根据 JPA 2.0,我如何覆盖基本类型映射的映射?我知道我可以使用@MapKeyColumn 来映射地图的键,而且我确信也有一些方法可以映射@CollectionTable 的值侧......
但是我将如何覆盖这些?
考虑一个带有地图的@Embeddable
@CollectionTable
@MapKeyColumn(name="differentname_KEY")
Map<Integer, String> testMap;
我将如何覆盖键和值?我是使用@AttributeOverride 还是其他什么? (或者不可能?!)
我在这里假设这样的地图将使用@CollectionTable 进行映射,所以如果我错了,请纠正我。 如果 JPA 没有给出答案,我很想知道持久性提供者是如何解决这个问题的。
编辑: Viruzzo 评论说基本类型是可嵌入类型。 我愿意接受这一点,但有些东西阻碍了我: JSR-317 指的是一个可嵌入的类(见上面的引号)。类型和类不一样...
【问题讨论】:
-
基本类型可嵌入;我会说这只是一个糟糕的词选择。
-
如果您将其添加为答案,我可以接受...您确定没有区别吗?与我所见的深度有所不同:如果是可嵌入的,它将是
@AttributeOverride(name="embeddable.testMap.key.attribute" [column omitted]),如果是基本类型,它将是@AttributeOverride(name="embeddable.testMap.key" [column omitted])。 -
@MapKeyClass 还声明“映射键可以是基本类型、可嵌入类或实体。”,从而进一步支持可嵌入类型与可嵌入类不同。
-
我没说它们是一样的,只是基本类型是可嵌入的(不是可嵌入的class);简单地说,可嵌入的 class 是在传递给 JPA 时合并到容器类中的类,这是基本类型的本机(也是唯一)行为。
-
好的,……这如何回答这个问题?我很难理解。
标签: java annotations jpa-2.0