【问题标题】:Is it OK to add @Id to an entity which mapped to a table without Primary key column in Spring boot Jpa?可以将@Id添加到映射到Spring boot Jpa中没有主键列的表的实体吗?
【发布时间】:2021-09-25 00:14:58
【问题描述】:

我已经开始使用旧版 oracle 数据库并使用 Spring boot Jpa 尝试在没有身份的表 (CHANNELMGR_REQUEST) 中插入新行:

此表有一个数字列 (CM_ISN),逻辑上可能是身份候选者,但由于某种原因我无法访问数据库。

我还发现了一个现有序列 (CHANNELMGR_SEQ),它也用于为该 CM_ISN 列生成值。

所以我决定使用该序列并在我的等效 POJO 中添加一些注释,如下所示,并将序列映射到 CM_ISN 列。但不接触数据库:

我的仓库是这样的:

在插入行时,成功调用序列但得到如下异常:

我的问题:

  1. 修改实体并将@Id添加到不在等效表中的实体是错误的吗?
  2. 我收到错误的代码有什么问题?

PS:很抱歉放了图片而不是实际的源代码,原因是开发机器无法访问互联网。

【问题讨论】:

    标签: java oracle11g spring-data-jpa database-sequence


    【解决方案1】:
    1. 如果不是主键就错了
    2. 使用 BigDecimal 代替 Number

    【讨论】:

    • BigDecimal 解决了这个问题。为什么第一个问题是错误的?你有什么建议?
    • 通过使用@Id,您依赖于列是唯一的,即使它在逻辑上是唯一且非空的,数据库也不会强制执行。当插入不符合注释要求的数据时,这可能会导致非常意外的结果。
    猜你喜欢
    • 2013-12-10
    • 1970-01-01
    • 1970-01-01
    • 2020-10-26
    • 1970-01-01
    • 2022-01-16
    • 2019-07-13
    • 1970-01-01
    • 2018-12-08
    相关资源
    最近更新 更多