【问题标题】:How to get DB sequence value when using micronaut-data with JDBC将 micronaut-data 与 JDBC 一起使用时如何获取 DB 序列值
【发布时间】:2020-02-04 00:04:45
【问题描述】:

我在我的应用程序中使用带有 JDBC 的 micronaut-data(无休眠) 我需要使用 Oracle DB 序列生成我的主键值

根据他们的官方文档(https://micronaut-projects.github.io/micronaut-data/1.0.x/guide/#jdbc) Section:9.1.4.1 SQL Annotations

仅支持部分 JPA 注释,我在列表中没有找到 @GeneratedValue 和 @SequenceGenerator(所以不确定是否支持)

而且文档说,

第 9.1.4.2 节 ID 生成 如果您希望使用序列作为 ID,您应该调用生成序列值的 SQL 并在调用 save() 之前分配它。

那么,查询 Oracle 数据库以获取序列值的最佳方法是什么?(与 JPA 不同,我这里没有任何会话/实体管理器)。

已经尝试使用 JPA 注释生成序列:

@GeneratedValue 和@SequenceGenerator

同时使用,

@GenerateValue 存在于 micronaut 数据库中 (io.micronaut.data.annotation.GeneratedValue)

示例代码:

@Id
@GeneratedValue(策略= GenerationType.SEQUENCE,生成器=“ID_SEQ”) @SequenceGenerator(sequenceName = "EMPLOYEE_ID_SEQ", allocationSize = 1, name = "ID_SEQ")
private Long employeeId;

以上代码失败:

原因:java.lang.NullPointerException:null 在 oracle.jdbc.driver.OraclePreparedStatement.setupDbaBindBuffers(OraclePreparedStatement.java:3194)

【问题讨论】:

    标签: oracle jdbc micronaut micronaut-data


    【解决方案1】:

    尚不支持序列生成器,但在 TODO 列表中

    【讨论】:

    • 那么,您暂时应该建议什么方法?我们发现的一种方法是创建一个抽象存储库类并使用“JdbcOperations”,触发 DB 序列 sql 以获取下一个序列并在调用保存 API 之前将值设置为我的实体。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-12
    • 1970-01-01
    • 1970-01-01
    • 2016-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多