将注释应用于从@MappedSuperclass继承的字段

Tim*_*kov 4 java inheritance annotations jpa mappedsuperclass

具有:

@MappedSuperclass
class Superclass {

    @Id
    @Column(name = "id")
    protected long id;

    @Column(name="field")
    private long field;

}
Run Code Online (Sandbox Code Playgroud)

@Entity
class Subclass extends Superclass {

}
Run Code Online (Sandbox Code Playgroud)

如何使用@GeneratedValue注释继承的id,使用@Index在Subclass中注释?

Pas*_*ent 5

如何使用@GeneratedValue注释继承的id,使用@Index在Subclass中注释?

AFAIK,你做不到.您可以做的是使用AttributeOverrideAssociationOverride注释覆盖属性和关联(即更改列或连接列).但你不能完全按照你的要求去做.

对于GeneratedValue,如果您不想在映射的超类中声明它,请考虑使用XML映射来覆盖策略.

对于Index(顺便说一下,这不是标准注释),您是否真的尝试使用Hibernate的Table注释在表级别声明它(我假设您正在使用Hibernate)?

@Table(appliesTo="tableName", indexes = { @Index(name="index1", columnNames=
    {"column1", "column2"} ) } ) 
Run Code Online (Sandbox Code Playgroud)

在表tableName的列上创建已定义的索引.

参考

  • JPA 1.0规范
    • 第2.1.9.2节"映射的超类"
    • 第9.1.10节"AttributeOverride注释"
    • 第9.1.11节"AttributeOverrides注释"
    • 第9.1.12节"AssociationOverride注释"
    • 第9.1.13节"AssociationOverrides注释"
  • Hibernate Annotations参考指南