我有一个名为“Service”的 JPA 实体,其 ID 作为主键
@Id
@Column(name = "ID")
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
@Column(name = "NAME")
private String name;
当我尝试通过 JPA 持久化 API 持久化此数据时
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,或在代码中手动设置。
序列示例:
@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;
关于java - JPA与ORACLE插入空错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27227964/