找不到“ HIBERNATE_SEQUENCE”

时间:2019-06-13 08:00:56

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

我有两个表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() {
}

}

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

表EmployeeGroup

 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:无法准备语句

1 个答案:

答案 0 :(得分:0)

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

在类EmployeeDetail中,您有一个groupId的Oracle序列,但有一个GenerationType.AUTO的{​​{1}}的Oracle序列

employeeId引起了问题。

您还必须在那里使用Oracle序列,或者,如果此ID来自其他地方,则必须删除GenerationType.AUTO