使用Sequence生成错误的Postgres插入记录 - org.postgresql.util.PSQLException:错误:关系“双重”不存在

时间:2016-12-29 16:09:05

标签: postgresql hibernate

我是Postgres数据库的新手。

我有一个Java Entity类,其ID为以下列:

@Entity
@Table(name = "THE_RULES")
public class TheRulesEntity {
/** The id. */
    @Column(name = "TEST_NO", precision = 8)
    @SequenceGenerator(name = "test_no_seq", sequenceName = "TEST_NO_SEQ")
    @GeneratedValue(generator = "test_no_seq", strategy = GenerationType.AUTO)
    @Id
    private Long id;

/** The test val. */
    @Column(name = "TEST_VAL", nullable = false, length = 3)
    private String testVal;

代码:

rulesRepository.saveAndFlush(theRulesEntity)

表:

CREATE TABLE THE_RULES
(
    TEST_NO         INT NOT NULL,
    TEST_VAL        VARCHAR(3) NOT NULL
)

CREATE SEQUENCE "TEST_NO_SEQ" START WITH 1000 INCREMENT BY 1;

当我尝试从我的应用程序向postgres数据库插入一条新记录时(在调试模式下,Java代码中的ID值为null),我得到以下错误:

Caused by: org.postgresql.util.PSQLException: ERROR: relation "dual" does not exist

但是如果我手动将记录插入数据库表然后从我的应用程序更新记录,那么记录会成功更新(可能是因为应用程序使用相同的ID值,所以不再需要引用Sequence TEST_NO_SEQ值)

看起来数据库无法从双表访问序列。 任何人都可以帮我解决这个问题吗?

感谢。

1 个答案:

答案 0 :(得分:2)

感谢Joop和a_horse_with_no_name,问题已解决

  1. 我使用的是错误的Oracle驱动程序。我已更新我的代码以使用Postgres驱动程序
  2. 我在数据库中再次创建了具有相同名称但没有引号的序列
  3. 我在Java实体类中使用了所有大写字母来正确引用序列