JPA с ошибкой вставки ORACLE

1

У меня есть объект JPA с именем "Сервис" с идентификатором в качестве первичного ключа

@Id
@Column(name = "ID")
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;

@Column(name = "NAME")
private String name;

Когда я пытаюсь сохранить эти данные с помощью API-совместимости JPA

Service service = new Service("abcservice");    
entityManager.persist(service);

Я получаю ошибку

cannot insert NULL into ("TESTUSER992"."SERVICE"."ID")
org.hibernate.exception.ConstraintViolationException: could not insert: [com.dto.Service]

Я использую Oracle thin, sid: xe

Теги:
exception
jpa
constraints

1 ответ

2

Oracle не поддерживает автоматически созданный столбец, например MySQL или Postgres. Вам нужно будет использовать последовательность или таблицу для создания идентификаторов или установить ее вручную в коде.

Пример последовательности:

@Id 
@GeneratedValue(generator="ServiceIdSeq", strategy=GenerationType.SEQUENCE) 
@SequenceGenerator(name="ServiceIdSeq", sequenceName="SERVICE_ID_SEQ")
private long id;

Пример таблицы:

@Id 
@GeneratedValue(generator="ServiceIdTab", strategy=GenerationType.TABLE) 
@TableGenerator(name="ServiceIdTab", table="SEQUENCE_ID_GEN", 
    pkColumnName="ID_NAME", valueColumnName="ID_VAL", 
    pkColumnValue="SERVICE_GEN")
private long id;

ОБНОВИТЬ

Выполните это в своей базе данных, чтобы создать последовательность:

CREATE SEQUENCE SERVICE_ID_SEQ INCREMENT BY 1;
  • 0
    Я попробовал оба из них, но получаю ошибку. ошибка: org.hibernate.exception.SQLGrammarException : не удалось получить следующее значение последовательности
  • 0
    @ImranTariq Вам нужно создать последовательность в БД, чтобы это работало. Проверьте мой обновленный ответ. Это создаст последовательность, настроенную в первом примере.
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню