java - 使用 EntityManager 更新 Hibernate

标签 java hibernate named-query hibernate-entitymanager

我正在使用 Hibernate 4.1.7 并尝试更新对象,但没有文档说明应该如何完成。目前,我正在这样做:

    Person person = personDao.getPersonById(1);
    person.setAge(23);
    person.setLastname("McName");
    person = personDao.update(person);

在 PersonDao 中更新如下:

    public Person update(Person person) {
      return entityManager.merge(person);
    }

在 PersonDao 中 getPersonById 是:

    public Person getPersonById(int id) {
      personQuery = entityManager.createNamedQuery("Person.findPerson", Person.class);
      personQuery.setParameter("id", id);
      return personQuery.getSingleResult();
    }

我还在 Person 类中定义了命名查询,并且在此处:

    @NamedQuery(name="Person.findPerson", query="SELECT p FROM Person p WHERE p.id = :id")

通过使用我的人不会被更新,我应该如何使用 hibernate 实现更新?

最佳答案

您可能会想到两种情况。

您可能想要更改对象的某个属性,并且只更改该属性。

如果是这种情况,您希望使用以下方法:查找、修改、刷新、提交。

em.find(Person.class, person.getId())
person.setStatus("ACTIVE");
em.commit();//implicitly flushes if flush mode is COMMIT or AUTO.

您可能希望使用对象属性来更新项目。

如果是这种情况,您希望使用以下方法:合并、可选地修改、刷新、提交。

em.merge(person);
//modify person if you wish.
em.commit();//implicitly flushes if flush mode is COMMIT or AUTO.

关于java - 使用 EntityManager 更新 Hibernate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13102792/

相关文章:

java - Flink中读取xml文件

postgresql - 带有空参数的 JPA NamedQuery

java - 检查 ID 是否包含在 JPA 的列表中

java - 如何在 Java 中使用 Mockito 验证字符串内容

java - 如何在 Java 中引用 Kotlin 对象类型?

java - Hibernate 中的 Order.asc(<String>) 和 Comparable 接口(interface)中的 "compareTo"行为是否相同?

java - 正确实现 dao 类来管理事务

java - SearchServlet 已由较新版本的 Java Runtime 编译

java - 是否可以使用 Hibernate API 复制复杂的查询结果?

nhibernate - nhibernate 中的命名查询错误