Java 带有ORACLE插入null错误的JPA
我有一个名为“服务”的JPA实体,其ID作为主键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
@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:xeOracle不支持自动生成列,如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:'无法获取下一个序列值