结合@MappedSuperclass和@SecondaryTable - 这是允许的吗?

时间:2012-02-01 11:37:31

标签: java annotations jpa-2.0

为我的实习工作JPA 2.0合规套件。该套件的一部分是覆盖角落案件。

@MappedSuperclass没有原始表,因为它不是实体。 JSR-317说明了这个有趣的内容:

  

使用MappedSuperclass注释指定的类可以以与实体相同的方式映射,除了映射将仅应用于其子类,因为映射的超类本身不存在表。

“由于映射的超类本身不存在任何表。”

这是否意味着“没有默认值” - 您可以根据需要制作自己的表格,但它本身无法检索?

或者这是否意味着“映射的超类不存在任何表” - 您不能创建一个(@SecondaryTable)?

根据JPA 2.0,是否允许将部分@MappedSuperclass映射到@SecondaryTable

1 个答案:

答案 0 :(得分:1)

我不确定你是指在映射的超类中使用@ SecondaryTable-annotation还是在映射的超类中定义的属性持久保存到派生映射的实体中的@SecondaryTable表,所以我尝试回答这两个问题。

映射的超类没有自己的表。上下文被映射的超类是用于定义表。这是有道理的,因为否则从一个映射的超类继承到多个实体的映射总是需要覆盖除一个派生实体之外的所有其他实例中的表名。我认为“映射的超类没有表”关闭也使用@SecondaryTable进行。

JPA 2.0规范第12.3章给出的XML Schema也不允许映射超类的secondary-table。

但是在实体中使用@AttributeOverride的column-element将从映射的超类派生的属性保存到实体的辅助表应该没问题。规范中没有任何内容可以反对这种情况。

所以我认为“映射的超类没有表可以存在”是正确的,但没有什么能阻止你将这些属性放到实体的辅助表中。关于列的表的决定发生在派生属性和关联映射的实体中,而不是在映射的超类本身中。