使用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();
例外我得到:
org.hibernate.QueryException:无法解析属性:key_Name:com.mirs.ecms.db2.T04SysParms [select from com.mirs.ecms.db2.T04SysParms s WHERE s.key_Name ='EXECUTION_TIME'] < / p>
这是我的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_SYS_PARMS 映射的表名是:T04SysParms
任何想法? 谢谢, 射线。
答案 0 :(得分:1)
问题在于其中一个列名。确保您同时拥有VALUE
列和KEY_NAME
列。也可以将汽车视为具有案例敏感性。
顺便说一下,我不明白你为什么需要原生查询。你不能使用JPQL查询吗?请注意,在JPQL查询中,您必须引用类和字段而不是表和列。所以它不是KEY
,而是key
。
顺便说一下,KEY
有时会被数据库保留(如VALUE
所建议的那样)。怎么样 - 打开一些数据库管理员工具并尝试运行查询。只有在它工作之后才将它移到您的代码中。
答案 1 :(得分:0)
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();
应该返回符合您需要的T04SysParms对象列表。
应该可以使用SQL表单执行类似的操作(调整它以获取所有字段),但是为了获取实体而不是单个字段,JPQL更合适。