将NamedNativeQuery的结果部分映射到类

时间:2014-08-01 12:58:26

标签: java hibernate jpa playframework-2.2

我有一个@EntityPerson,它有多个字段,我想将几​​个@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;

我真的不想为我需要运行的每个查询创建一个定制的类,所以如果我想要做的事情是可能的,那么任何帮助都会非常感激。提前谢谢。

1 个答案:

答案 0 :(得分:0)

我相信你误解了@NamedNativeQuery使用。此注释应与SQL查询一起使用,而不是与存储过程一起使用。查看异常SQLGrammarException: could not execute query,可以看到这是一个语法异常,无法解析查询。

使用JPA 2.1,您可以使用支持存储过程的注释@NamedStoredProcedureQuery