1
假设一个简单的JPA实体类是这样的:使用JPA 2 TypedQuery更新
@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
,而不是做什么?
感谢您的回答。我对这种方法的担心是,它似乎会导致重复的读 - 修改 - 写周期,而一个简单的SQL更新语句将允许数据库进行更新,而不会将所有受影响的行传输到客户端并返回到数据库。根据受影响的行数,这可能会有很大的不同。或者JPA层能够优化RMW周期吗? – Waldheinz
我理解你的担忧,我认为,对于额外的客户端 - 服务器往返的事情,你是对的。然而,你可以处理一些优化。请参阅此链接,例如:http://java-persistence-performance.blogspot.com/2011/06/how-to-improve-jpa-performance-by-1825.html – perissf