Java 意外的JPA错误:列名无效
使用jboss5.1.x、ejb3.0 这让我疯狂了两天: 我正在尝试简单的where子句查询,但不断出现错误: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
这是我通过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();