有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

有什么想法吗? 谢谢 雷


共 (2) 个答案

  1. # 1 楼答案

    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更合适

  2. # 2 楼答案

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

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

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