如何序列标识符?

在我们的旧架构中,我们使用了这样的 id:


/**

  * Model for each database-object

  */

public abstract class AbstractDbBase {

    @Getter

    @Setter

    @Id

    @GeneratedValue(generator = "increment")

    @GenericGenerator(name = "increment", strategy = "increment")

    @Column(nullable = false, unique = true, updatable = false)

    private Long id;

}

但是我们在更改 Hibernate 之外的值时遇到了一些问题。所以我们决定使用bigserialfrom postgres。


我们更改了数据库并为每个表添加了一个序列并将其设置为主键。我们有很多实体,并且所有实体都使用AbstractDbBase. 而 inAbstractDbBase是 id 的定义。


但是现在我们无法设置 Hibernate 以正确使用该序列。我们尝试了以下策略(对于@GeneratedValue()-annotation):


GenerationType.IDENTITY:在休眠状态下创建记录时抛出异常(无法访问序列)。

GenerationType.SEQUENCE: 抛出验证异常(未找到序列)。

GenerationType.AUTO: 抛出验证异常(未找到序列)。

我的问题是:我们如何告诉 Hibernate 使用正确的序列?(没有为每个实体写明确的序列名称)


红糖糍粑
浏览 145回答 1
1回答

HUX布斯

我发现了这一点:休眠无法获得下一个序列值所以我必须使用GenerationType.IDENTITY. 现在我必须解决“没有序列许可”的问题。我已经完成了这个问题:错误:使用 Postgres 拒绝序列城市 id_seq 的权限它现在有效。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java