可以将@Id添加到映射到Spring boot Jpa中没有主键列的表的实体吗?
Posted
技术标签:
【中文标题】可以将@Id添加到映射到Spring boot Jpa中没有主键列的表的实体吗?【英文标题】:Is it OK to add @Id to an entity which mapped to a table without Primary key column in Spring boot Jpa? 【发布时间】:2021-09-25 00:14:58 【问题描述】:我已经开始使用旧版 oracle 数据库并使用 Spring boot Jpa 尝试在没有身份的表 (CHANNELMGR_REQUEST
) 中插入新行:
此表有一个数字列 (CM_ISN
),逻辑上可能是身份候选者,但由于某种原因我无法访问数据库。
我还发现了一个现有序列 (CHANNELMGR_SEQ
),它也用于为该 CM_ISN
列生成值。
所以我决定使用该序列并在我的等效 POJO 中添加一些注释,如下所示,并将序列映射到 CM_ISN
列。但不接触数据库:
我的仓库是这样的:
在插入行时,成功调用序列但得到如下异常:
我的问题:
-
修改实体并将@Id添加到不在等效表中的实体是错误的吗?
我收到错误的代码有什么问题?
PS:很抱歉放了图片而不是实际的源代码,原因是开发机器无法访问互联网。
【问题讨论】:
【参考方案1】:-
如果不是主键就错了
使用 BigDecimal 代替 Number
【讨论】:
BigDecimal 解决了这个问题。为什么第一个问题是错误的?你有什么建议? 通过使用@Id,您依赖于列是唯一的,即使它在逻辑上是唯一且非空的,数据库也不会强制执行。当插入不符合注释要求的数据时,这可能会导致非常意外的结果。以上是关于可以将@Id添加到映射到Spring boot Jpa中没有主键列的表的实体吗?的主要内容,如果未能解决你的问题,请参考以下文章
Spring Boot JPA:将一个实体映射到具有相同列的多个(很多)表
使用 Spring Boot 和 Thymeleaf 将复选框映射到列表
如何将Spring Boot RepositoryRestResource映射到特定的URL
如何将 Spring Boot @RepositoryRestResource 映射到特定的 url?