无法使用2个或更多设置参数运行命名查询以进行更新操作

时间:2011-11-03 06:36:46

标签: java hibernate spring java-ee

<query name="account.updateUpdate">
        <![CDATA[update com.xyz.Account  set Level = :level,lastUpdationDate = :lastUpdationDate where id = :accountId]]>

</query>

例外:

  

引起:org.hibernate.QueryException:并未设置所有命名参数:[level,accountId,lastUpdationDate] [           更新com.xyz.Account set Level =:level,lastUpdationDate =:lastUpdationDate,其中id =:accountId

]
    at org.hibernate.impl.AbstractQueryImpl.verifyParameters(AbstractQueryImpl.java:315)
    at org.hibernate.impl.AbstractQueryImpl.verifyParameters(AbstractQueryImpl.java:299)
    at org.hibernate.impl.QueryImpl.executeUpdate(QueryImpl.java:113)
    at org.springframework.orm.hibernate3.HibernateTemplate$39.doInHibernate(HibernateTemplate.java:1150)
    at org.springframework.orm.hibernate3.HibernateTemplate$39.doInHibernate(HibernateTemplate.java:1)

我正在尝试执行此查询,但我得到了异常并且我通过删除命名查询的commain set参数尝试了这一点,如

<query name="account.updateUpdate">
            <![CDATA[update com.xyz.Account  set Level = :level lastUpdationDate = :lastUpdationDate where id = :accountId]]>

    </query>

仍然没有用。请给我解决方案。

我正在使用它从我的Dao加载命名查询

Query query = getHibernateTemplate().getSessionFactory().getCurrentSession().getNamedQuery("account.updateStatus");
        query.setString("level ", level );
        query.setTimestamp("lastUpdationDate", new Timestamp(new Date().getTime()));
        query.setString("accountId", accountId);
        Integer count = getHibernateTemplate().bulkUpdate(query.getQueryString());

1 个答案:

答案 0 :(得分:0)

您的参数名为lastUpdationDate,并且您尝试使用lastUpdateDate进行设置。修复它。在第二个查询中,您会错过一个逗号。

但无论如何 - 通常你不应该用查询进行更新。只需获取您的对象,使用POJO的setter设置新值,并保留它。如果您坚持,则可以使用@org.hibernate.annotations.Entity(dynamicUpdate=true)仅更新已更改的字段(否则生成的查询将包含所有字段)。