<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());
答案 0 :(得分:0)
您的参数名为lastUpdationDate
,并且您尝试使用lastUpdateDate
进行设置。修复它。在第二个查询中,您会错过一个逗号。
但无论如何 - 通常你不应该用查询进行更新。只需获取您的对象,使用POJO的setter设置新值,并保留它。如果您坚持,则可以使用@org.hibernate.annotations.Entity(dynamicUpdate=true)
仅更新已更改的字段(否则生成的查询将包含所有字段)。