JPA 命名查询集
JPA named query set
我正在尝试创建一个命名查询,其中包含一个可更改 2 个字段的集合。以下是我尝试过的方法,但没有用。它工作正常,直到我添加 ae.endTime 和 setParameter。你能不能在一个查询中设置多个东西?
@NamedQuery(name = AttEnt.JQL.MARK_INCOMPLETE,
query = "UPDATE AttEnt ae"
+ " SET ae.result ="
+ " Result.INCOMPLETE,"
+ " ae.endTime = :now"
+ " WHERE ae.result IS NULL")
下面是我调用查询的地方。
final EntityManager em = emf.createEntityManager();
// Mark things with no result as incomplete and endTime to current time
em.getTransaction().begin();
final Query upAtt = em.createNamedQuery(
AttEnt.JQL.MARK_INCOMPLETE);
updateAttempts.setParameter("now", (new Date()).getTime());
upAtt.executeUpdate();
em.getTransaction().commit();
根据您映射 endTime
字段的方式,您应该使用 setParameter
方法的重载变体,它会添加日期时间信息。例如:
updateAttempts.setParameter("now", (new Date()).getTime(), TemporalType.TIME);
更多关于 Temporal Types。
我正在尝试创建一个命名查询,其中包含一个可更改 2 个字段的集合。以下是我尝试过的方法,但没有用。它工作正常,直到我添加 ae.endTime 和 setParameter。你能不能在一个查询中设置多个东西?
@NamedQuery(name = AttEnt.JQL.MARK_INCOMPLETE,
query = "UPDATE AttEnt ae"
+ " SET ae.result ="
+ " Result.INCOMPLETE,"
+ " ae.endTime = :now"
+ " WHERE ae.result IS NULL")
下面是我调用查询的地方。
final EntityManager em = emf.createEntityManager();
// Mark things with no result as incomplete and endTime to current time
em.getTransaction().begin();
final Query upAtt = em.createNamedQuery(
AttEnt.JQL.MARK_INCOMPLETE);
updateAttempts.setParameter("now", (new Date()).getTime());
upAtt.executeUpdate();
em.getTransaction().commit();
根据您映射 endTime
字段的方式,您应该使用 setParameter
方法的重载变体,它会添加日期时间信息。例如:
updateAttempts.setParameter("now", (new Date()).getTime(), TemporalType.TIME);
更多关于 Temporal Types。