gpt4 book ai didi

java - 无法运行具有 2 个或更多设置参数的更新操作的命名查询

转载 作者:行者123 更新时间:2023-12-01 05:37:08 25 4
gpt4 key购买 nike

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

</query>

异常:

Caused by: org.hibernate.QueryException: Not all named parameters have been set: [level, accountId, lastUpdationDate] [ update com.xyz.Account set Level = :level,lastUpdationDate = :lastUpdationDate where 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());

最佳答案

您的参数名为 lastUpdationDate,并且您尝试使用 lastUpdateDate 设置它。解决这个问题。在第二个查询中,您错过了一个逗号。

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

关于java - 无法运行具有 2 个或更多设置参数的更新操作的命名查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7991079/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com