假设一个简单的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 2 TypedQuery
,CriteriaQuery
和元模型来执行简单的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();
可以使用TypedQuery
代替吗?
答案 0 :(得分: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);
有关详细信息,请参阅此answer。