частично сопоставление результата NamedNativeQuery с классом
0 Ganonside [2014-08-01 15:58:00]
У меня есть класс @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
действительно существуют в запрашиваемой таблице.
Мой фактический класс намного больше, и из-за этого и некоторых проблем с безопасностью я не хочу, чтобы мои запросы возвращались в поле КАЖДЫЙ, и я надеюсь, что есть простой способ просто дать им значение null
если значение не является возвращенный запросом. Я попытался установить для каждого поля значение null
в объявлении (пример ниже), но это тоже не сработало.
@Column(name = "bar")
private String bar = null;
Мне бы действительно не пришлось создавать индивидуальный класс для каждого отдельного запроса, который мне нужно запустить, поэтому, если я пытаюсь сделать это, возможно, любая помощь будет принята с большой благодарностью. Заранее спасибо.
java hibernate jpa playframework-2.2
1 ответ
0 uaiHebert [2014-08-02 06:37:00]
Я считаю, что вы неправильно @NamedNativeQuery
использование @NamedNativeQuery
. Эта аннотация должна использоваться с SQL Query, а не с хранимой процедурой. Глядя на исключение SQLGrammarException: could not execute query
можно увидеть, что это исключение для грамматики, запрос не может быть проанализирован.
С JPA 2.1 вы можете использовать аннотацию @NamedStoredProcedureQuery
которая поддерживает хранимые процедуры.