java - Hibernate 是否会检测到何时使用 id?
问题描述
我正在使用 hibernate 的 java 应用程序也使用的表上插入数据。
我知道 Hibernate 有一些特殊的策略来生成@Ids
for 实体。
我的问题是:如果我选择一个随机 id 在数据库中手动插入一个新数据,我会有什么问题吗?手动我的意思是直接在数据库中使用 sql insert 语句。
为了让自己清楚,让我举个例子:
(1)我有一个User
当前最高id为10的实体;
(2) 我不得不使用插入语句直接手动插入数据库,例如,
INSERT INTO user (id, username) values (11, 'user_11');
INSERT INTO user (id, username) values (12, 'user_12');
(3) 现在我必须插入一个新用户,这次使用的是应用程序。此时,无论实体 User 设置的策略如何,hibernate 会在尝试使用数据之前@GeneratedValue
检查由 传递的 Id是否可用?@GeneratedValue
先感谢您。
解决方案
根据您的评论,您说您正在使用GenerationType.IDENTITY
在这里您可以找到更多信息,特别是:
尽管身份排序似乎是分配 id 的最简单方法,但它们有几个问题。一个是由于在插入行之前数据库不会分配 id,因此直到提交或刷新调用之后才能在对象中获取 id。 身份排序也不允许序列预分配,因此可能需要对每个插入的对象进行选择,这可能会导致主要的性能问题,因此通常不推荐使用。
因此,如果您已经在数据库中完成了插入操作,那么表应该知道这一点,但建议使用不同的解决方案(例如使用SEQUENCE代替)
推荐阅读
- java - 为什么接受子类对象的方法不能通过超类的引用识别子类的对象?
- sql-server - 如何从 SQL Server 的表视图中获取最新日期
- kubernetes - 将环境变量传递给 zipkin helmchart
- port - 同源策略 Cypress,两个不同的端口
- azure - Azure Blob 存储视频不会搜索 - AWS S3 工作正常
- fusionauth - FusionAuth ElasticSearch 用于具有过期字段的用户
- linux - 全局初始化失败:FileNotOpen:无法打开“/var/log/mongodb/mongodb.log”
- powershell - Azure 管道:如何在条件中使用输出变量
- laravel-blade - 缺少路由所需的参数?
- javascript - Electron Packager:创建的 .Exe 不工作