2011-08-24 70 views
1

我想知道是否有任何意义(或者即使它是正确的)用@Inheritance注解每一个层次结构的类。例如,假设我们有以下简单的层次结构:将JPA的2.0 @Inheritance注释用于子类是否有意义?

public class A { ... } 
public class B extends A { ... } 
public class C extends A { ... } 

为了保存这些类的对象,我们就标注A类如下:

@Entity 
@Inheritance(strategy = InheritanceType.JOINED) 
public class A { ... } 

我的问题是,我们需要将@Inheritance注释添加到类B和C也?正如Javadoc所说“它是作为实体类层次结构的根的实体类指定的。”所以我的潜在答案是,不!但是,如果我们对它们进行注释,这是否有任何意义,还是完全被忽略?

感谢

回答

0

您需要@Inheritance注解添加到子类,如果你需要使用非默认InheritanceType。

如您所知,支持3种继承类型。每个类层次结构的表,每个子类的表和每个具体类的表。 InheritanceType.SINGLE_TABLE默认情况下使用,并且您的所有父类和子类对象将被放置在一个表中。

如果要使用InheritanceType.JOINED或InheritanceType.TABLE_PER_CLASS,则需要添加@Inheritance注释。

+0

只是为了澄清一点。我已经用InheritanceType.JOINED注释了基类。我的问题是:是否有效/合法/有意义的还注释一个子类,也许选择另一个继承类型(例如InheritanceType.TABLE_PER_CLASS)? – gpol

+0

如果您想为Subclass1使用JOINED,为Subclass2使用TABLE_PER_CLASS,则应该为每个子类添加注释。另外,不需要向超类添加注释。 如果您为超类添加注释,则所有没有注释的子类都应该使用它。 –

+0

所以,如果我用JOINED注解类A,根据你说的我应该有的类B留下类B和注释类C: – gpol