"HIBERNATE_SEQUENCE" не найден - PullRequest
       40

"HIBERNATE_SEQUENCE" не найден

0 голосов
/ 13 июня 2019

У меня есть две таблицы EmployeeGroup и EmpplyeeDetails Table.EmployeeGroupTable имеет первичный ключ groupid, который должен быть сгенерирован из последовательности данных GroupIdGenerator.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

Я получаю ошибку, так как ОШИБКА ohejdbc.spi.SqlExceptionHelper - последовательность "HIBERNATE_SEQUENCE" не найдена;Оператор SQL: вызовите следующее значение для hibernate_sequence [90036-197] org.springframework.orm.jpa.JpaSystemException: не удалось подготовить оператор;вложенным исключением является org.hibernate.exception.GenericJDBCException: не удалось подготовить оператор

1 Ответ

0 голосов
/ 13 июня 2019

Вы смешиваете стратегии Id-генератора:

В классе EmployeeDetail у вас есть последовательность Oracle для groupId, но GenerationType.AUTO для employeeId

Это GenerationType.AUTO вызывает проблему.

Либо вам также нужно использовать последовательность Oracle, либо вы должны удалить @GeneratedValue, если этот идентификатор откуда-то еще.

...