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 2とメタモデルを使用して、単純なSQLクエリと同等の処理を行うにはどうすればよいTypedQueryですかCriteriaQueryUPDATE TASK SET done = ? WHERE id = ?ネット上で見つけたものはすべて、このようなJPAを使用することになります。

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

TypedQuery代わりにこれを行うことはできますか?

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 に答える