Java hibernate无法检测命名参数

Java hibernate无法检测命名参数,java,hibernate,Java,Hibernate,我正在尝试执行一个hibernate查询。创建查询后,query.getQueryString 打印如下: select a from com.mycompany.model.dwh.Instruction a where a.custBillAcctId = :accountId 然后,当我尝试设置参数时: query.setParameter("accountId", new BigDecimal(accountId)); 我得到: org.hibernate.QueryParame

我正在尝试执行一个hibernate查询。创建查询后,query.getQueryString 打印如下:

select a 
from com.mycompany.model.dwh.Instruction a 
where a.custBillAcctId = :accountId
然后,当我尝试设置参数时:

query.setParameter("accountId", new BigDecimal(accountId));
我得到:

org.hibernate.QueryParameterException: 
could not locate named parameter [accountId]
我打印query.getNamedParameters,它似乎是空的。Hibernate无法检测到:accountId。我尝试了不同的方法,通过参数索引设置,等等,都失败了。 我在JEE Hibernate中做了数百万次,但在Spring Hibernate中失败了

环境:Eclipse码头 冬眠:4.1.9.1决赛 springframework:3.2.1.0版本

这是我的密码:

    try {
         Session session = sessionFactory.getCurrentSession();

         Query query = session.createQuery("select a from " +   
                               Instruction.class.getName() + " a 
                               where a.custBillAcctId = :accountId ");  


         System.out.println("getNamedParameters: ");
         for(String g:query.getNamedParameters()){
             System.out.println(g + "\n");
         }

         query.setParameter("accountId", new BigDecimal(accountId));

    } catch (Exception e1) {
        e1.printStackTrace();
    }

谢谢,我刚刚解决了这个问题。这是一个愚蠢的副作用问题。我有多个databaseContext.xml文件,每个文件都包含应用程序使用的不同数据库的数据源定义。虽然它们位于不同的文件中,但数据源id是一致的,这导致了不明确的行为


当我给他们唯一的名字时,问题就消失了

给我们看看你的代码。从查询创建到执行。看看这些@Anirtak Varma,我也尝试过类似的方法1,但错误没有改变2建议:自己写类名,然后尝试使用序号参数,看看会发生什么。从指令a中选择一个,其中a.custBillAcctId=?1。然后将参数设置为query.setParameter1,新的BigDecimalAccounted@达米安:他们两个都不工作。所以我放弃了,只是删除了:accountId,并使用字符串concat来放置值。我知道这不好,但节省了一些时间。thnx
    try {
         Session session = sessionFactory.getCurrentSession();

         Query query = session.createQuery("select a from " +   
                               Instruction.class.getName() + " a 
                               where a.custBillAcctId = :accountId ");  


         System.out.println("getNamedParameters: ");
         for(String g:query.getNamedParameters()){
             System.out.println(g + "\n");
         }

         query.setParameter("accountId", new BigDecimal(accountId));

    } catch (Exception e1) {
        e1.printStackTrace();
    }