У меня есть объект 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
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;
org.hibernate.exception.SQLGrammarException
: не удалось получить следующее значение последовательности