当前位置: 首页 > 面试题库 >

用@MappedSuperclass注释的类上的@SequenceGenerator

邢灿
2023-03-14
问题内容

我的实体具有以下结构:

@MappedSuperclass
public abstract class BaseEntity {
  @Id @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seqGenerator")
  private Long id;
}

@MappedSuperclass
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@SequenceGenerator(name = "seqGenerator", sequenceName = "DICTIONARY_SEQ")
public abstract class Intermed extends BaseEntity {}

@Entity
public class MyEntity1 extends Intermed {}

@Entity
public class MyEntity2 extends Intermed {}

我得到以下异常:

    Caused by: org.springframework.beans.factory.BeanCreationException: 
Error creating bean with name 'sessionFactory' defined in class path resource [context/applicationContext.xml]: 
Invocation of init method failed; nested exception is org.hibernate.AnnotationException: Unknown Id.generator: seqGenerator

当我在Intermed类上将@MappedSuperclass更改为@Entity时,一切正常。使用@MappedSuperclass和@SequenceGenerator是否有任何问题?还是我错过了什么?


问题答案:

这是JPA 1.0规范对SequenceGenerator注释的说明:

9.1.37 SequenceGenerator批注

SequenceGenerator注解定义了可以由名称当用于指定的发电机元件被参考的主键生成 GeneratedValue注释。可以
在实体类主键字段或属性上 指定序列生成器 。生成器名称的范围对于持久性单元是全局的(跨所有生成器类型)。

映射的超类不是实体。因此,按照我阅读规范的方式,您不可能做任何事情。使Intermed该类成为实体或将其SequenceGenerator放在子类上。



 类似资料:
  • 问题内容: 我想将通用映射分组到中,但不能使用,因为我的实体已经扩展了另一个。所以我需要一个类似下面的界面: 我想像下面这样使用它: 我的意思是说这项工作可行吗? 我可以在接口上使用@MappedSuperclass注释吗? Hibernate是否支持接口? 问题答案: 号如前所述这里: JPA不直接支持接口或变量关系。

  • 在我当前的代码(Java)中,我正在使用类级Java注释进行一些自定义注释处理,即注释。 目标类只包含静态实用程序方法,所以我在Kotlin中使用了文件范围的函数。如何将这些注释添加到生成的类中? 在Java中: 现在在静态编程语言中:

  • 问题内容: 我目前正在尝试将Dagger 2集成到Android应用程序中。我的项目设置如下: 图书馆 应用(取决于库) 在我的库项目中,我定义了一个类,稍后将其插入到库以及应用程序项目中的其他需要该类的类(活动和常规类)中。 现在-例如在我的“片段”或“活动”或常规类中,我将上述Singleton注入如下: 大概我想,因为实际上myManager始终为null。显然,它的构造函数也从未被调用过,

  • 我正在使用注释处理器来处理方法参数的注释。 用于参数的注释类型有一个注释@参数 现在,当注释处理器运行时,我想检查参数注释()是否有参数注释。我通过执行以下代码来实现这一点。 由于某种原因,arg始终为空。是否有注释未返回的原因?

  • 问题内容: 我将JPA2与Hibernate结合使用,并尝试为我的实体引入一个通用的基类。到目前为止看起来像这样: 但是,对于每个表,都有一个序列要用作序列生成器。我该如何在子类中进行设置?我想我需要重写@GeneratedValue并使用@SequenceGenerator创建一个新的SequenceGenerator。 问题答案: 是的,有可能。您可以使用注释覆盖默认的生成器名称。 基类 序列

  • 我有以下问题: 我已经为安全性创建了注释: 在我具有类之间的继承性的情况下,是否也有可能所有类都具有@Security注释来获得最具体的定义? 约西