【问题标题】:JPA (Hibernate): "ORA-02289 Sequence does not exist", but it doesJPA(休眠):“ORA-02289 序列不存在”,但确实存在
【发布时间】:2018-05-15 16:22:10
【问题描述】:

我正在使用 JPA 实体。

我像这样创建了一个新的:

@Entity
public class Entity {
    @Id
    @GeneratedValue(generator = "Entity_Sequence", strategy = GenerationType.SEQUENCE)
    @SequenceGenerator(name = "Entity_Sequence", sequenceName = "Entity_Seq")
    private Long id;

    // ... other fields
}

生成的 SQL 我用来创建 DB 对象:

CREATE SEQUENCE ENTITY_SEQ START WITH 1 INCREMENT BY 50;

CREATE TABLE ENTITY (
  ID     NUMBER(19, 0) NOT NULL,
  -- ... other fields
  PRIMARY KEY (ID)
);

现在,我可以从 SQL Developer 和 IntelliJ 查询序列的 nextval。但是当我尝试从代码中持久化实体时,Hibernate 会抛出以下异常:

15:21:11,022 INFO  [stdout] (EJB default - 2) Hibernate: select ENTITY_SEQ.nextval from dual
15:21:11,037 WARN  [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] (EJB default - 2) SQL Error: 2289, SQLState: 42000
15:21:11,037 ERROR [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] (EJB default - 2) ORA-02289: Sequence ist nicht vorhanden.

(“Sequence ist nicht vorhanden”翻译为“序列不存在”。)

为什么我在 Hibernate 找不到序列?

编辑 1 (12-01):
我尝试了建议的answer from Olivier,但错误仍然相同。

编辑 2 (12-01):
由于 Olivier 删除了他的答案,他建议我将 @SequenceGenerator 注释移至班级。

【问题讨论】:

  • 你确定hibernate连接到正确的数据库吗?
  • @OlivierGrégoire 是的,所有其他实体都可以工作(我在一年前创建,但结构相同)
  • Oracle 通常不区分大小写,但请尝试在您的实体中将您的表名大写:sequenceName = "ENTITY_SEQ"
  • @OlivierGrégoire 我也试过了,还是没有。我还使用了一个自定义的 NamingStrategy,它已经将名称转换为 UPPER_CASE。
  • 该数据库是否有多个用户?是否有可能您使用特定用户(我们称此用户“admin”)创建了序列和表,但正在与另一个用户(我们称此用户“app”)一起使用休眠?然后,一些脚本可以看到“应用程序”的表,但对序列不做同样的事情吗?

标签: java oracle hibernate jpa


【解决方案1】:

我发现了错误:这是我的本地设置,所以没有什么有用的信息告诉你,请检查你的设置。

我在服务器实际未使用的文件中“配置”我的服务器,因此没有任何效果。

【讨论】:

    【解决方案2】:

    可能有很多错误。是否有更多关于您的项目配置的信息?

    问候 丹尼斯

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-30
    • 1970-01-01
    • 2021-09-19
    • 2021-09-03
    • 2019-08-06
    • 2018-09-28
    • 2014-08-31
    相关资源
    最近更新 更多