gpt4 book ai didi

java - jpa 命名查询返回的对象受到管理并保留更改。如何?

转载 作者:行者123 更新时间:2023-12-01 18:12:29 24 4
gpt4 key购买 nike

我有一个实体(比如 Employee)和一个 find 方法,该方法使用 TypedQuery 执行命名查询并返回 Employee 行。当此返回的 Employee 实例的属性发生更改时,它将被保留。

我试图弄清楚这背后的 JPA 概念以及这与更新有何不同。如果数据库中现有行的少数列值需要更改,那么像这样更新单行是否合适。寻找解释这一点的 JPA 概念的指针。

这是代码片段。

 @Entity
@NamedQueries({
@NamedQuery(name = "Employee.findInActiveEmployee", query = "SELECT e FROM Employee e" +
"WHERE some_prop = :something")
})
public class Employee implements Serializable {

@Id
@NotNull
@Column(name = "id")
private String id;

@Column(name = "name")
private int name;

//so and so properties
//getter and setters
}

查找方法

TypedQuery<Employee> query = getEntityManager().
createNamedQuery("Employee.findInActiveEmployee", Employee.class);
query.setParameter("someproperty", "somevalue");
try {
return query.getSingleResult();
} catch (NoResultException e) {
throw new NoSuchObjectException("somevalue");
}

最佳答案

这与更新没有什么不同。

在 JPA 中,您通常不需要显式合并更改,因为 JPA 实现将跟踪托管对象中的数据已更改(即 EntityManager 中的实体)知道,例如它刚刚为您加载的那些),并确保将这些更改保存到底层数据库。

如果您不希望这样,可以使用 em.detach(Object o); 显式分离实体,这样 EntityManager 就不再管理它。之后,您需要执行 merge() 来更新任何更改。

关于java - jpa 命名查询返回的对象受到管理并保留更改。如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31964800/

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