我定义了一个具有生成 ID 值的实体,但是当我尝试执行插入时出现此错误:
10:33:32,202 WARN [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] (default task-8) SQL Error: 2289, SQLState: 42000
10:33:32,203 ERROR [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] (default task-8) ORA-02289: sequence does not exist
10:33:32,205 ERROR [org.jboss.as.ejb3.invocation] (default task-8) WFLYEJB0034: EJB Invocation failed on component javax.ejb.EJBTransactionRolledbackException: org.hibernate.exception.SQLGrammarException: could not extract ResultSet
Caused by: javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not extract ResultSet
Caused by: java.sql.SQLSyntaxErrorException: ORA-02289: sequence does not exist
实体:
@Entity
@Table(name = "TYPEDEM")
public class TypeDem {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name = "ID")
private long id;
@Column(name = "CODE")
private String code;
@Column(name = "LABEL")
..
}
类别:
@Override
public TypeDem save(TypeDem typeDem) {
entityManager.persist(typeDem);
return typeOfDemand;
}
在调试中,我看到 id 的值为空
最佳答案
身份生成器
它用于 Sybase、My SQL、MS SQL Server、DB2 和 HypersonicSQL,以支持 id 列。返回的id类型为short、int或long。
IDENTITY 类型(包含在 SQL:2003 标准中)受以下支持:
SQL 服务器 MySQL(自动增量) 数据库2 HSQL数据库 IDENTITY 生成器允许整数/bigint 列根据需要自动递增。增量过程发生在当前正在运行的事务之外,因此回滚可能最终会丢弃已经分配的值(可能会发生值间隙)。
对于Oracle,请使用以下代码@GenerateValue(strategy=GenerationType.AUTO)
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name = "ID")
关于java - JPA : Auto Increment ID with Oracle Database,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45670510/