JPA:Oracle数据库的自动增量ID

时间:2017-08-14 08:37:42

标签: java jpa

我使用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

2 个答案:

答案 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

这清楚地表明数据库中缺少序列。