java意外JPA错误:列名无效
使用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();
我得到的例外:
组织。冬眠QueryException:无法解析属性:key\u名称:com。大鹏。ECM。db2。T04SysParms[从com.mirs.ecms.db2.T04SysParms s中选择s,其中s.key\u Name='EXECUTION\u TIME']
这是我的mappe课程:
@Entity
@Table(name = "T04_SYS_PARMS", schema = "ECMS")
public class T04SysParms implements java.io.Serializable
{
// Fields
private String key_Name;
private String value_Name;
// Constructors
/** default constructor */
public T04SysParms()
{
}
/** minimal constructor */
public T04SysParms(String keyName)
{
this.key_Name = keyName;
}
/** full constructor */
public T04SysParms(String keyName, String valueName)
{
this.key_Name = keyName;
this.value_Name = valueName;
}
// Property accessors
@Id
@Column(name = "KEY_NAME", unique = true, nullable = false, length = 100)
public String getKeyName()
{
return this.key_Name;
}
public void setKeyName(String keyName)
{
this.key_Name = keyName;
}
@Column(name = "VALUE_NAME", length = 200)
public String getValueName()
{
return this.value_Name;
}
public void setValueName(String valueName)
{
this.value_Name = valueName;
}
}
数据库中的实际表名:T04\u SYS\u PARMS 映射的表名为:T04SysParms
有什么想法吗? 谢谢 雷
# 1 楼答案
VALUE
是sql标准中的保留字。你真的有那个专栏吗?如果是这样,您可能需要在查询中引用它。或者更好,把它改成一个更有意义的名字根据评论,这可能不是根本问题,尽管我认为避免保留字是健康的
您还显示了只获取VALUE_NAME字段的查询,但随后您试图从结果中提取整个T04SysParms
基于包括映射的更新,查询的JPQL版本:
应返回符合您需要的T04SysParms对象列表
应该可以对SQL表单执行类似的操作(调整它以获取所有字段),但要获取实体而不是单个字段,JPQL更合适
# 2 楼答案
问题在于其中一个列名。确保同时具有
VALUE
列和KEY_NAME
列。另外,考虑到潜在的案例敏感性,也可以选择car顺便说一句,我不明白你为什么需要本地查询。您不能使用JPQL查询吗?请注意,在JPQL查询中,必须引用类和字段,而不是表和列。所以它不是
KEY
而是key
顺便说一下
KEY
有时是由数据库保留的(如其他建议的VALUE
)。这个怎么样-打开一些数据库管理员工具并尝试运行查询。只有在它在那里工作之后,才能将其移动到您的代码中