这个问题引起了令人难以置信的挫败感。基本上我花了1个小时来设置一个完整的hibernate项目。但是这个问题让我持续了将近5个小时,而且我一直在努力。
Query query = session.createQuery("FROM " + FieldData.class.getName() +" ff WHERE ff.fieldData = :fieldData");
query.setParameter("fieldData", fieldData);
无论我做什么(我的意思是认真),我都会得到 IllegalArgumentException 。我尝试了query.setLong(),因为fieldData碰巧是Long值。
我检查了吸气剂和制定者,他们看起来像这样
@Column(..I cant reveal mappings)
getFieldData()
{
return this.fieldData;
}
setFieldData(Long fieldData)
{
return this.fieldData;
}
最后,变量声明本身就是这样的:
private Long fieldData;
这里发生了什么?为什么 HARD 来解决这个问题。这些框架是否足够成熟,没有错误?我正在使用Hibernate 3.4。或者这是开源软件的全部意义吗?
最后,query.createQuery()使用的参数元数据对象没有在其中拾取的变量。
请告诉我这里我做错了什么。我真的很想知道我犯了一个错误而且框架没有错 - 这对我来说真的是个好消息。
答案 0 :(得分:0)
经过艰苦的努力,我发现了这个问题的问题。在创建hibernate会话时,我没有包含POJO包装名称。这导致了各种参数绑定问题。关于Hibernate最糟糕的部分是它会引发异常,这些异常都是误导性的。当它甚至无法在第一时间解析该类时,它就会抛出QueryParameterException。我认为他们必须努力解决这个问题。它使得Hibernate持久性很难用于开发,并且整个设置非常脆弱,可以进行任何微小的更改。