首页 > 解决方案 > Hibernate 是否会检测到何时使用 id?

问题描述

我正在使用 hibernate 的 java 应用程序也使用的表上插入数据。

我知道 Hibernate 有一些特殊的策略来生成@Idsfor 实体。

我的问题是:如果我选择一个随机 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

先感谢您。

标签: javahibernate

解决方案


根据您的评论,您说您正在使用GenerationType.IDENTITY

在这里您可以找到更多信息,特别是:

尽管身份排序似乎是分配 id 的最简单方法,但它们有几个问题。一个是由于在插入行之前数据库不会分配 id,因此直到提交或刷新调用之后才能在对象中获取 id。 身份排序也不允许序列预分配,因此可能需要对每个插入的对象进行选择,这可能会导致主要的性能问题,因此通常不推荐使用。

因此,如果您已经在数据库中完成了插入操作,那么表应该知道这一点,但建议使用不同的解决方案(例如使用SEQUENCE代替)


推荐阅读