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

标签 mysql servlets persistence jpa-2.0

我正在使用 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/

相关文章:

java - JPOX JDO 和 Castor JDO 与 Hibernate 持久性的比较

mysql - WHERE 子句中的多个 OR 条件 - 仅返回一条记录

mysql 更改表以添加选定的列

servlets - 从 HttpServletRequest 中提取 SOAP 对象

Java Servlet - 找不到符号 - 同一文件夹中的对象

java - Spring 框架: findBy throws Illegal Argument Exception

mysql - 单个表上的多个 select 语句

java - 在 Hibernate 中是否可以(以及如何)创建与命名查询的关联?

java servlet在JSP中获取cookie值

java - Hibernate 功能 lower 和 upper 不适用于波兰语特殊字符