Hibernate setParemeter 基于 1 还是基于 0?查询参数异常
Hibernate setParemeter 1-based or 0-based? QueryParameterException
假设其他一切都像魅力一样工作(实体、命名查询、本机命名查询)我在尝试 运行 后续查询时遇到奇怪的异常,其中日期列类型为 TIMESTAMP
:
@NamedNativeQuery(name = "problematicQuery", query = "DELETE FROM mytable WHERE date < ?")
我正在尝试使用以下代码执行此查询,其中日期为 java.sql.Timestamp
:
Query deleteQuery = em.createNativeQuery("problematicQuery");
deleteQuery.setParameter(1, date);
deleteQuery.executeUpdate();
此代码导致以下异常:
org.hibernate.QueryParameterException: Position beyond number of declared ordinal parameters. Remember that ordinal parameters are 1-based! Position: 1
当我将中间代码行更改为:
Query deleteQuery = em.createNativeQuery("problematicQuery");
deleteQuery.setParameter(0, date);
deleteQuery.executeUpdate();
我会得到不同位置的相同异常:
org.hibernate.QueryParameterException: Position beyond number of declared ordinal parameters. Remember that ordinal parameters are 1-based! Position: 0
我正在使用 JBoss 7.2.0.Final(Hibernate 版本是 4.2.0.CR1),Oracle 11g.
怎么了?我错过了什么吗?
您应该在 JPA QL 中使用命名参数:@NamedNativeQuery(name = "problematicQuery", query = "DELETE FROM mytable WHERE date < :dt"
和deleteQuery.setParameter("dt", date);
看来你用错了方法
em.createNamedQuery("problematicQuery")
而不是
em.createNativeQuery("problematicQuery");
在您的例子中,查询是从字符串 "problematicQuery" 创建的,其中不存在任何参数
假设其他一切都像魅力一样工作(实体、命名查询、本机命名查询)我在尝试 运行 后续查询时遇到奇怪的异常,其中日期列类型为 TIMESTAMP
:
@NamedNativeQuery(name = "problematicQuery", query = "DELETE FROM mytable WHERE date < ?")
我正在尝试使用以下代码执行此查询,其中日期为 java.sql.Timestamp
:
Query deleteQuery = em.createNativeQuery("problematicQuery");
deleteQuery.setParameter(1, date);
deleteQuery.executeUpdate();
此代码导致以下异常:
org.hibernate.QueryParameterException: Position beyond number of declared ordinal parameters. Remember that ordinal parameters are 1-based! Position: 1
当我将中间代码行更改为:
Query deleteQuery = em.createNativeQuery("problematicQuery");
deleteQuery.setParameter(0, date);
deleteQuery.executeUpdate();
我会得到不同位置的相同异常:
org.hibernate.QueryParameterException: Position beyond number of declared ordinal parameters. Remember that ordinal parameters are 1-based! Position: 0
我正在使用 JBoss 7.2.0.Final(Hibernate 版本是 4.2.0.CR1),Oracle 11g.
怎么了?我错过了什么吗?
您应该在 JPA QL 中使用命名参数:@NamedNativeQuery(name = "problematicQuery", query = "DELETE FROM mytable WHERE date < :dt"
和deleteQuery.setParameter("dt", date);
看来你用错了方法
em.createNamedQuery("problematicQuery")
而不是
em.createNativeQuery("problematicQuery");
在您的例子中,查询是从字符串 "problematicQuery" 创建的,其中不存在任何参数