2009-09-20 102 views
0

我有以下几个问题Java持久性API(JPA) - 覆盖MappedSuperClass的属性

  1. 我有“@Id”注释字段作为我的“@MappedSuperclass”的一部分,我让我所有的实体扩展MappedSuperClass.Now,如果我必须为我的实体定义一个复合主键,我该如何重写超级类'id'...即,如何让我的实体使用其注释为@EmbeddedId的复合主键代替从MappedSuperClass继承的@Id注释字段?我的实体中的@EmbeddedId批注是否会自动覆盖超类的@Id?

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

谢谢。

回答

1

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

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

作为我的MappedSuperClass的一部分,我制作了几个字段(这些字段由我的模式中的大多数实体共享)。现在,如果少数实体不需要它们,我该如何避免将这些字段添加为列?

那么,再次,不要继承保存这些字段和使用另一个实体超类的实体超类。

0

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

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