java - JPA与ORACLE插入空错误

标签 java oracle exception jpa constraints

我有一个名为“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/

相关文章:

java - 对使用同步适配器和内容提供程序同步多个表感到困惑

java - 关于tomcat日志记录的问题

sql - 如何获取每个ID的正负数计数?

oracle - 在 SQL Developer 中打印变量的值

java - Java进程的关闭 Hook 不会在gradle守护进程中触发

oracle - 如何根据某些列值隐藏交互式网格中的行?

python - 多态异常处理 : How to catch subclass exception?

c++ - 使用异常检查 C++ 流时出错

java - main方法抛出异常是什么意思?

java - BitmapFactory.decodeByteArray() 返回 NULL