gpt4 book ai didi

mysql - 获取新持久化实体的 ID (PK)

转载 作者:行者123 更新时间:2023-11-29 05:41:46 25 4
gpt4 key购买 nike

我正在使用 MySql 5.02 数据库开发 J2EE 6 Web 应用程序。每次创建新实体时,我都试图生成 ID 的哈希摘要。这被设置为表中的一列。

但是好吧,我被困在了一些显然很容易的事情上,并且根据我在谷歌搜索中发现的东西,这是可能的。基本上我想检索新持久对象的 ID(主键),但无论我尝试什么,它都会返回 null。

步骤如下:

  1. 创建实体的实例 -> userCard = new Users();
  2. 用一些值设置相应的字段。
  3. 调用 EntityManagerpersist() 方法。

在阅读了一些论坛之后,我了解到我必须在 persist() 之后调用 flush(),或者使用 merge() 和使用返回的实体检索 ID。

public void createAndFlush(Users users) {
em.persist(users);
em.flush();
}

public Integer edit(Users users) {
return ((Users)em.merge(users)).getIdvcards();
}

它们(以及其他一些组合)都不起作用,好吧,实体已成功持久化,但 ID 字段返回 null。

这些是我要检索的 id 列的相应注释:

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "idvcards")
private Integer idvcards;

显然,我的表的列 idvcards 设置为自动递增和主键。

也许我只需要澄清我的持久性管理概念,但如果我能得到一些提示来解决这个基本问题,我将不胜感激。

最佳答案

也许这不是最优雅的解决方案,但最终我成功地检索了新实体的 ID:

public Integer create(User user) {
em.persist(users);
em.flush();
return (Integer) em.getEntityManagerFactory().getPersistenceUnitUtil().getIdentifier(users);
}

好吧,尽管与功能无关,但我按照@Bohemian 的建议将实体名称更改为单数形式。

关于mysql - 获取新持久化实体的 ID (PK),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6303635/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com