Java Persistence API(JPA) - 覆盖MappedSuperClass的属性

时间:2009-09-20 04:38:37

标签: jpa ejb-3.0

我有以下问题

  1. 我将'@Id'注释字段作为我'@MappedSuperClass'的一部分,我让所有实体都扩展了MappedSuperClass.Now,如果必须,我如何覆盖超类'id'为我的实体定义一个复合主键... ie。如何让我的实体使用注释为@EmbeddedId的复合主键而不是从MappedSuperClass继承的@Id注释字段?我的实体中的@EmbeddedId注释会自动覆盖超类的@Id吗?

  2. 我已经将一些字段(我的架构中的大多数实体共享)作为MappedSuperClass的一部分。现在,如果很少有实体不需要它们,我该如何避免将这些字段添加为列?

  3. 感谢。

2 个答案:

答案 0 :(得分:1)

  

[...]如何让我的实体使用注释为@EmbeddedId的复合主键而不是从MappedSuperClass继承的@Id注释字段?我的实体中的@EmbeddedId注释会自动覆盖超类的@Id吗?

AFAIK,你做不到。因此,在这种情况下不要从您的实体超类继承,请使用另一个实体超类。

  

我已经将一些字段(我的架构中的大多数实体共享)作为MappedSuperClass的一部分。现在,如果很少有实体不需要这些字段,我该如何避免将这些字段添加为列?

那么,再次,不要从包含这些字段的实体超类继承并使用另一个实体超类。

答案 1 :(得分:0)

JPA提供attribute-override来覆盖嵌入或映射的超类字段的映射。

对于Annotations,您可以在java类中使用@AttributeOverride注释。 对于多个属性,您可以使用@AttributeOverrides注释,其中包含@AttributeOverride注释的数组。