【问题标题】:Hibernate exception position beyond number of declared ordinal parameters超出声明的序数参数数量的休眠异常位置
【发布时间】:2015-07-18 21:49:51
【问题描述】:

我想使用hibernate执行mysql插入查询,我有这个:

String q1="INSERT INTO sample (DatasetStatusID,Message,ProcessTime) VALUES('?','?','?') ";
Query query=session.createSQLQuery(q1);
query.setParameter(0, 5);
query.setParameter(1, "TESTING");
query.setParameter(2, new Date());  
int result=query.executeUpdate();
tx.commit();

我发生了以下异常,

线程“主”org.hibernate.QueryParameterException 中的异常: 超出声明的序数参数数量的位置。请记住 序数参数是从 1 开始的!位置:1

这里有什么问题?

【问题讨论】:

  • 为什么不使用hibernate save()方法而不是native sql
  • 我是hibernate新手,我只知道mysql查询
  • 您是否将您的 pojos 映射到数据库表?
  • 是的,我为表映射了 pojo 类
  • 好的,我将添加答案如何使用hibernate 保存。

标签: mysql hibernate


【解决方案1】:

如果您使用HIBERNATE,推荐的保存数据方式是save()HIBERNATE 具有数据库操作的所有方法。但是您可以使用 native sql 查询的一些原因。使用 hibernate 保存如下所示:

 Session sess = factory.openSession();
 Transaction tx;
 try {
     tx = sess.beginTransaction();
     sess.save(YourPojo);
     tx.commit();
 }
 catch (Exception e) {
     if (tx!=null) tx.rollback();
     throw e;
 }
 finally {
     sess.close();
 }

推荐的Hibernate教程:
Hibernate Reference Documentation
Hibernate Tutorial

【解决方案2】:

尝试删除查询中参数占位符(问号)周围的引号。

【讨论】:

  • 我还检查了参数 1、2、3 排序发生了相同的异常,位置超出了声明的序数参数的数量。请记住,序数参数是基于 1 的!职位:2
  • 尝试去掉问号周围的引号;这行得通吗?
  • 我检查了给定的格式,但出现异常,String q1="INSERT INTO datasethistory(DatasetStatusID,Message,ProcessTime) VALUES(5,'Testing',"+new Date()+") "; 没有为参数 1 指定值
  • 是使用数字 1,2,3 还是 0,1,2?你两个都试过了吗?我看了一些例子,他们都叫setParameter(0, ...)所以我对参数编号有误。
  • 两种参数类型我都试过了,我会检查表格部分是否有问题
猜你喜欢
  • 1970-01-01
  • 2012-01-18
  • 2012-10-16
  • 1970-01-01
  • 1970-01-01
  • 2015-09-13
  • 2016-10-24
  • 1970-01-01
  • 2015-07-25
相关资源
最近更新 更多