我有一个@Entity
类Person
,它有多个字段,我想将几个@NamedNativeQuery
的结果映射到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;
我真的不想为我需要运行的每个查询创建一个定制的类,所以如果我想要做的事情是可能的,那么任何帮助都会非常感激。提前谢谢。
答案 0 :(得分:0)
我相信你误解了@NamedNativeQuery
使用。此注释应与SQL查询一起使用,而不是与存储过程一起使用。查看异常SQLGrammarException: could not execute query
,可以看到这是一个语法异常,无法解析查询。
使用JPA 2.1,您可以使用支持存储过程的注释@NamedStoredProcedureQuery
。