2

假设一个简单的 JPA 实体类是这样的:

@Entity(name="TASK")
public class Task implements Serializable {
    /* getters/setters omitted for brevity */

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @Temporal(javax.persistence.TemporalType.TIMESTAMP)
    private Date done;
}

如何使用 JPA 2TypedQueryCriteriaQuery元模型来执行相当于简单UPDATE TASK SET done = ? WHERE id = ?SQL 查询的操作?我在网上能找到的一切都会导致像这样使用 JPA

Query q = em.createQuery(
  "UPDATE TASK SET done = :date WHERE id = :id");
q.setParameter(/* set date and id */);
q.executeUpdate();

这可以用 aTypedQuery代替吗?

4

1 回答 1

1

您应该执行此类操作的 JPA 方式是让 CriteriaQuery 选择要修改的项目,并使用纯 Java 循环遍历它们,然后使用merge()方法修改它们。就像是:

Date d;
CriteriaQuery<Task> cq = cb.createQuery(Task.class);
...
TypedQuery<Task> tq = em.createQuery(cq);
List<Task> tasks = tq.getResultList();
for (Task task : tasks) {
    task.setDone(d);
    em.merge(task);
}
// or
Task task = tq.getSingleResult();
task.setDone(d);
em.merge(task);

请参阅此答案以获取更多参考。

于 2012-05-26T19:56:03.567 回答