首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Hibernate是否会检测到某个id正在被使用?

Hibernate是否会检测到某个id正在被使用?
EN

Stack Overflow用户
提问于 2018-07-23 22:10:00
回答 2查看 232关注 0票数 0

我在一个表中插入数据,该表也被一个使用hibernate的java应用程序使用。

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

我的问题是:如果我选择一个随机的id在数据库中手动插入一个新数据,会有什么问题吗?手动,我的意思是使用sql insert语句直接进入数据库。

为了清楚起见,让我举一个例子:

(1)我有一个实体User,当前最高id为10;

(2)我必须使用insert语句直接手动插入到数据库中,例如,

代码语言:javascript
复制
INSERT INTO user (id, username) values (11, 'user_11');
INSERT INTO user (id, username) values (12, 'user_12');

(3)现在我必须插入一个新用户,这次使用的是应用程序。此时,不管实体用户设置了什么@GeneratedValue策略,hibernate是否会在尝试使用数据之前检查@GeneratedValue传递的Id是否可用?

谢谢你,提前谢谢。

EN

回答 2

Stack Overflow用户

发布于 2018-07-23 22:21:25

通常,id应该是表的主键-这意味着数据库本身将检查它是否是唯一的并且不为空。在PostgreSQL中,最好的方法是在id列中使用serialbigserial数据类型,在Hibernate/JPA @GeneratedValue策略中使用sequence。您可以在API Doc中阅读有关不同类型生成器的更多信息。这将把创建新id的责任转移到数据库,因此Hibernate和插入查询之间的行为将是一致的

票数 1
EN

Stack Overflow用户

发布于 2018-07-23 22:27:38

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

Here您可以找到更多信息,特别是:

虽然身份排序似乎是分配id的最简单方法,但它们有几个问题。

因此,从理论上讲,如果您已经在数据库中执行了插入操作,表应该知道这一点,但建议使用不同的解决方案(如使用SEQUENCE )。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51480833

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档