未找到“HIBERNATE_SEQUENCE”

Posted

技术标签:

【中文标题】未找到“HIBERNATE_SEQUENCE”【英文标题】:"HIBERNATE_SEQUENCE" not found 【发布时间】:2019-10-27 18:41:06 【问题描述】:

我有两个表 EmployeeGroup 表和 EmpplyeeDetails 表。 EmployeeGroupTable 具有应该从数据库序列 GroupIdGenerator 生成的主键 groupid。 EmployeeDetails 有两个主键,即 groupid 和employeeid。 Groupid 应与上表相同,并且employeeid 也应具有增量值,例如 1、2、3。 两个表中的这些值都应插入一个事务中。 您能帮我正确映射吗?

我已经尝试过使用不同的生成值和序列生成器组合,但无法将数据保存到表中。

@Entity
   @Table(name="EMPLOYEE_GROUP")
   public class EmployeeGroup 

   @Column(name = "GROUP_ID")
   @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = 
      "groupid-gen")
   @Id
   @NotNull
   @SequenceGenerator(name = "groupid-gen", sequenceName = 
     "GROUIP_ID_GENERATOR" )
   private  long groupId;

   @OneToMany(mappedBy = "employeeDetail")
      private List<EmployeeDetail> employeeDetails;
      



@Entity
   @Table(name = "EMPLOYEE_DETAIL")
   @IdClass(EmployeeID.class)
   public class EmployeeDetail 

  @ManyToOne
  @JoinColumn(name = "GROUP_ID", insertable=false , updatable=false)
  private EmployeeGroup employeeGroup;

  @Id
  @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = 
     "groupid-gen")
  @SequenceGenerator(name = "groupid-gen", sequenceName = 
    "GROUIP_ID_GENERATOR" )
  @Column(name = "GROUP_ID")
  @Nonnull
     private Long groupId;

  @Id
  @GeneratedValue(strategy = GenerationType.AUTO)
  @Nonnull
  @Column(name = "EMPLOYEE_ID")
    private Long employeeId;

public class EmployeeId

private Long groupId;

private Long employeeId;

public EmployeeId(final Long groupId, final Long employeeId) 
    this.groupId = groupId;
    this.employeeId = employeeId;


public EmployeeId() 

预期的结果是两个表都应该有适当的值。

表员工组

 GroupID
   1
   2

表 EmployeeDetail

GroupId       EmployeeId
  1            1
  1            2
  1            3
  2            1
  2            2

我收到错误消息 错误 o.h.e.jdbc.spi.SqlExceptionHelper - 序列“HIBERNATE_SEQUENCE” 未找到; SQL 语句: 调用 hibernate_sequence 的下一个值 [90036-197] org.springframework.orm.jpa.JpaSystemException:无法准备 陈述;嵌套异常是 org.hibernate.exception.GenericJDBCException:无法准备语句

【问题讨论】:

你用的是什么数据库? 嗨 @SimonMartinelli 我正在使用 Oracle 数据库。 【参考方案1】:

您正在混合 ID 生成器策略:

EmployeeDetail 类中,groupId 有一个 Oracle 序列,但employeeId 有一个 GenerationType.AUTO

这个GenerationType.AUTO 导致了问题。

要么你必须在那里使用 Oracle 序列,要么如果这个 id 来自其他任何地方,你必须删除 @GeneratedValue

【讨论】:

我希望employeeId 是一个像1,2,3 这样的自动递增值,并且不想使用Oracle 序列。您建议如何实现这一目标? 也使用 Oracle 序列 嗯,这确实消除了错误,但是我没有达到最终结果,所以可能会提出一个不同的问题以便更好地理解并添加链接。 另一种想法可能是创建 hibernate_sequence 表,但这会给您与 Oracle 序列相同的结果。 我的回答解决了您最初的问题,如果您接受它作为正确答案,我将不胜感激。谢谢

以上是关于未找到“HIBERNATE_SEQUENCE”的主要内容,如果未能解决你的问题,请参考以下文章

消息 -“无法读取 hi 值 - 您需要填充表:hibernate_sequence”

如何解决异常:表 'DBNAME.hibernate_sequence' 不存在

缺少序列或表:hibernate_sequence

GeneratedValue 无法识别现有的 hibernate_sequence

批量插入中的 Postgres 错误:关系“hibernate_sequence”不存在位置 17

得到错误 org.h2.jdbc.JdbcSQLSyntaxErrorException:找不到序列“HIBERNATE_SEQUENCE”; SQL 语句: