我使用Generated 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;
}
在debug中,我看到id的值为null
答案 0 :(得分:0)
身份生成器
它用于Sybase,My SQL,MS SQL Server,DB2和HypersonicSQL以支持id列。返回的id是short,int或long类型。
IDENTITY类型(包含在SQL:2003标准中)受以下支持:
SQL Server MySQL(AUTO_INCREMENT) DB2 HSQLDB IDENTITY生成器允许整数/ bigint列按需自动递增。增量过程发生在当前正在运行的事务之外,因此回滚可能会最终丢弃已分配的值(可能会出现值差异)。
对于 Oracle ,请使用以下代码 @GeneratedValue(strategy = GenerationType.AUTO)
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name = "ID")
答案 1 :(得分:0)
您的解决方案是正确的。
唯一的问题似乎是hibernate.hbm2ddl.auto未设置为更新,请使用更新。使用create或create-drop时要非常小心。
Caused by: javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not extract ResultSet
Caused by: java.sql.SQLSyntaxErrorException: ORA-02289: sequence does not exist
这清楚地表明数据库中缺少序列。