我正在使用 MySql 5.02 数据库开发 J2EE 6 Web 应用程序。每次创建新实体时,我都试图生成 ID 的哈希摘要。这被设置为表中的一列。
但是好吧,我被困在了一些显然很容易的事情上,并且根据我在谷歌搜索中发现的东西,这是可能的。基本上我想检索新持久对象的 ID(主键),但无论我尝试什么,它都会返回 null。
步骤如下:
- 创建实体的实例 ->
userCard = new Users();
- 用一些值设置相应的字段。
- 调用
EntityManager
的persist()
方法。
在阅读了一些论坛之后,我了解到我必须在 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/