【发布时间】:2014-08-01 12:58:25
【问题描述】:
我有一个@Entity 类Person,它有多个字段,我想将几个@NamedNativeQuerys 的结果映射到Person 类但是,我正在运行的查询不返回值Person 类中的每个字段。当我尝试运行查询时,出现以下错误:
[error] o.h.u.JDBCExceptionReporter - Invalid column name bar.
[error] play - Cannot invoke the action, eventually got an error: javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not execute query
我的班级是这样设置的:
@NamedNativeQueries({
@NamedNativeQuery(
name = "getBirthdate",
//Returns values for {idnumber, name, birthdate}
query = "EXEC dbo.proc_get_birthdate :name",
resultClass = Person.class
),
@NamedNativeQuery(
name = "getBar",
//Returns values for {idnumber, name, bar}
query = "EXEC dbo.proc_get_bar :name",
resultClass = Person.class
)
})
@Entity
public class Person {
@Id
@Column(name = "idnumber")
private int idNumber;
@Column(name = "name")
private String name;
@Column(name = "birthdate")
private String birthdate;
@Column(name = "foo")
private String foo;
@Column(name = "bar")
private String bar;
//All appropriate getter and setter methods are implemented
}
我仔细检查了一下,Person 类中的所有列实际上都存在于被查询的表中。
我的实际班级要大得多,由于这个原因和一些安全问题,我不希望我的查询必须返回 EVERY 字段,我希望有一种简单的方法来给他们如果查询未返回值,则值为 null。我尝试在声明中将每个字段设置为null(示例如下),但这也不起作用。
@Column(name = "bar")
private String bar = null;
我真的不想为我需要运行的每个查询创建一个定制的类,所以如果我想要做的事情是可能的,任何帮助将不胜感激。提前致谢。
【问题讨论】:
-
我不知道错误是由于映射。它看起来更像是一个 JDBC 错误,您试图返回表中不存在的列。我几乎可以肯定我已经做了类似的事情,不是所有的类变量都在查询中返回。
-
在引发错误的查询中未引用该列。并且该列确实存在于表中。
标签: java hibernate jpa playframework-2.2