hibernate无法检测命名参数

时间:2014-02-28 16:52:09

标签: 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.QueryParameterException: 
could not locate named parameter [accountId]

我打印“query.getNamedParameters()”,它似乎是空的。 Hibernate有点无法检测:accountId。我尝试了不同的东西,通过参数索引等设置。所有都失败了。 我在JEE-Hibernate中做了数百万次,但是我在Spring-Hibernate中失败了。

环境:Eclipse-Jetty 休眠:4.1.9。最终 springframework:3.2.1.RELEASE


@Entity
@Table(name = "TALIMAT")
public class Instruction implements Serializable {
private static final long serialVersionUID = 1L;

@Id
@Column(name = "TALIMAT_ID")
@GenericGenerator(name="kaugen" , strategy="increment")
@GeneratedValue(generator="kaugen")
private Long key;

@Id
@Column(name = "CUST_BILL_ACCT_ID")
private BigDecimal custBillAcctId;

....

@Column(name = "STATUS")
private String status;

@Temporal(TemporalType.DATE)
@Column(name = "INSERT_DATE")
private Date insertDate;

这是我的代码:

    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();
    }

由于

1 个答案:

答案 0 :(得分:3)

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

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