【问题标题】:"HIBERNATE_SEQUENCE" not found未找到“HIBERNATE_SEQUENCE”
【发布时间】: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 数据库。

标签: jpa spring-data-jpa openjpa jpa-2.1


【解决方案1】:

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

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

这个GenerationType.AUTO 导致了问题。

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

【讨论】:

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