在某些情况下,序列生成器不适用于子类(实体)

时间:2019-01-03 19:27:22

标签: java hibernate java-annotations

我已经通过继承关系中的注释成功定义了一个序列生成器,大致如下:

@MappedSuperclass
public class DomainObject {
    @Id
    @Column( columnDefinition = "serial" )
    @GeneratedValue( generator = "id_sequence", strategy = GenerationType.IDENTITY )
    private long id = 0;
}

@Entity
@Table( name = "user" )
@SequenceGenerator( name = "id_sequence", sequenceName = "user_id_seq" )
public class User extends DomainObject {
}

在此示例中,User类的序列生成器从DomainObject中的Generated值注释中找到id_sequence。

但是,如果我将DomainObject设为抽象类并将其放置在另一个依赖项中(关于它的所有其他内容都保持不变),则会出现异常:

org.hibernate.AnnotationException: Unknown Id.generator: id_sequence

在更改的版本中,DomainObject依赖项位于@ComponentScan路径中,因此我不确定为什么它不起作用。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

为什么不这样做:

@MappedSuperclass
public abstract class DomainObject {
   @Id
   @Column( columnDefinition = "serial" )
   @SequenceGenerator( name = "id_sequence", sequenceName = "user_id_seq" )
   @GeneratedValue( generator = "id_sequence", strategy = GenerationType.IDENTITY )
   private long id = 0;

}

@Entity
@Table( name = "user" )
public class User extends DomainObject {
}

我已经在其他项目中成功完成了此配置……关于找不到带注释的类,请确保DomainObject在类路径中,并且User实体在春季确实被检测到了。