Java 带有ORACLE插入null错误的JPA

Java 带有ORACLE插入null错误的JPA,java,oracle,exception,jpa,constraints,Java,Oracle,Exception,Jpa,Constraints,我有一个名为“服务”的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.pe

我有一个名为“服务”的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精简版,sid:xe

Oracle不支持自动生成列,如MySQL或Postgres。您必须使用序列或表格来生成ID,或者在代码中手动设置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;
表示例:

@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.sqlgrammareexception
:无法获取下一个序列value@ImranTariq您需要在DB中创建一个序列,这样才能工作。检查我的最新答案。它将创建在第一个示例中配置的序列。使用序列和表格后再次出现相同错误。无需使用
@TableGenerator
进行尝试,
创建序列
代码仅适用于
@SequenceGenerator
示例。异常堆栈跟踪中有更多详细信息吗<代码>原因:序列不存在或类似内容?'javax.persistence.PersistenceException:org.hibernate.exception.sqlgrammareexception:'无法获取下一个序列值