Java 意外的JPA错误:列名无效

Java 意外的JPA错误:列名无效,java,hibernate,jpa,jboss,ejb,Java,Hibernate,Jpa,Jboss,Ejb,使用jboss5.1.x、ejb3.0 这让我疯狂了两天: 我正在尝试简单的where子句查询,但不断出现错误: 这是我通过JPSQL查询得到的结果: String queString ="select s from T04SysParms s WHERE s.key_Name='EXECUTION_TIME'"; Query q = em.createQuery(queString); List<T04SysParms> resu

使用jboss5.1.x、ejb3.0

这让我疯狂了两天:

我正在尝试简单的where子句查询,但不断出现错误:


这是我通过JPSQL查询得到的结果:

       String queString ="select s from T04SysParms s WHERE s.key_Name='EXECUTION_TIME'"; 
        Query q = em.createQuery(queString); 
        List<T04SysParms> results = (List<T04SysParms>) q.getResultList(); 
数据库中的实际表名:T04\u SYS\u PARMS 映射的表名为:T04SysParms

有什么想法吗? 谢谢
ray。

问题在于其中一个列名。确保同时具有
列和
键名
列。另外,考虑到潜在的案例敏感性,也可以选择car

顺便说一句,我不明白你为什么需要本地查询。您不能使用JPQL查询吗?请注意,在JPQL查询中,必须引用类和字段,而不是表和列。所以它不是
KEY
,而是
KEY


顺便说一下,
有时由数据库保留(如其他建议的
)。这个怎么样-打开一些数据库管理员工具并尝试运行查询。只有在它工作之后,才将其移动到您的代码中。

VALUE
是sql标准中的保留字。你真的有那个专栏吗?如果是这样,您可能需要在查询中引用它。或者更好,把它改成一个更有意义的名字

根据评论,这可能不是根本问题,尽管我认为避免保留字是健康的

您还显示了只获取VALUE_NAME字段的查询,但随后您试图从结果中提取整个T04SysParms

基于包括映射的更新,查询的JPQL版本:

String queString ="select s from T04SysParms WHERE s.keyName='EXECUTION_TIME'";
Query q = em.createQuery(queString);
List<T04SysParms> results = (List<T04SysParms>) q.getResultList();
String queString=“从T04SysParms中选择s,其中s.keyName='EXECUTION\u TIME';
Query q=em.createQuery(queString);
List results=(List)q.getResultList();
应返回符合您需要的T04SysParms对象列表


应该可以对SQL表单执行类似的操作(调整它以获取所有字段),但要获取实体而不是单个字段,JPQL更合适

如果您仅从该表(T04\u SYS\u PARMS)中选择
VALUE
,我怀疑您是否可以使用单个列创建
T04SysParms
的完整对象。我猜这是一个简单的例子。至少需要选择标识列。我有VALUE和KEY\u NAME列,我已经确认了。我已经编辑了我的问题JPQL@rayman-我仍然看到
,它不太可能是类字段名。请看我的更新btwI在数据库编辑器中直接执行了sql命令,效果很好。我将其更改为“VALUE_NAME”,但仍然得到org.hibernate.QueryException:无法解析属性:KEY_NAME of:com.mirs.ecms.db2.T04SysParms[从com.mirs.ecms.db2.T04SysParms SYS WHERE SYS.KEY_NAME='EXECUTION_TIME'中选择VALUE_NAME]这看起来像Hibernate希望在实体中看到名为KEY_NAME的java属性,但没有找到它。如果您使用的是JPQL,则需要使用Java属性名。。我仍然得到:org.hibernate.QueryException:无法解析属性:KEY\u NAME of:com.mirs.ecms.db2.T04SysParms[从com.mirs.ecms.db2.T04SysParms SYS WHERE SYS.KEY\u NAME='EXECUTION\u TIME'中选择VALUE\u NAME]我将用映射的类编辑我的问题好主意。拥有映射将有助于提出建议。很抱歉,我错误地删除了您的上一条评论,无论如何:这就是我得到的:org.hibernate.QueryException:无法解析路径[s.key_Name],意外标记[s][从com.mirs.ecms.db2.T04SysParms中选择s,其中s.key_Name='EXECUTION_TIME']
String queString ="select s from T04SysParms WHERE s.keyName='EXECUTION_TIME'";
Query q = em.createQuery(queString);
List<T04SysParms> results = (List<T04SysParms>) q.getResultList();