У меня есть Объект Java Person
с 3 свойствами firstname
, lastname
и username
.
У меня есть хранимая процедура Oracle, возвращая набор результатов с 3 столбцами. Все хорошо работает для этого.
Теперь у меня есть другая хранимая процедура, которая только возвратит firstname и lastname, но не имя пользователя.
Я получаю следующую ошибку:
Не мог считать значение столбца из имени пользователя набора результатов
Будьте в спящем режиме попытки выбрать свойство имени пользователя от набора результатов. Если я удаляю имя пользователя свойства, то оно работает.
Моя конфигурация:
<sql-query name="normalise" callable="true" >
<return alias="val" class="com.nbfg.sipc.model.Person">
<return-property name="firstname" column="FIRST_NAME"/>
<return-property name="lastname" column="LASTNAME_NAME"/>
</return>
{call SCHSIPC.PKG_SIPC_APP.PRC_SIPC_NORMALISE_RS(?, ?, ?, ?, ?) }
</sql-query>
Мой Pojo (никакая аннотация)
@Entity
public class Person {
private String firstname;
private String lastname;
private String username;
...
Вызов:
private Value call(String app, String cat, String col, String valeure, String query) {
try {
Query q = getSessionFactory().openStatelessSession().getNamedQuery(query);
q.setString(0, app).setString(1, cat).setString(2, col).setString(3, valeure);
return (Person) q.list().get(0);
} catch (org.hibernate.QueryTimeoutException ex) {
throw new IllegalArgumentException(ex.getCause().getMessage());
}
}
Все это хорошо работает, если я удаляю свойство username
от моего Pojo. Я могу я снова использовать тот же PoJo?
Спасибо
Спасибо за код. Я не уверен на 100% в этом, но я считаю, что запросы SQL Hibernate должны возвращать все поля объекта, для которого требуется создать экземпляр запроса.
Вы можете попробовать альтернативное решение - положиться на HQL и создать экземпляр объекта по мере необходимости. Например, SELECT new Person (firstName, lastName) from Person p, где p.username = ... Это фактически позволяет вам использовать любой тип (с полями соответствующих типов) в ваших запросах.
Это решит вашу непосредственную проблему, но я не уверен, как решить проблему использования хранимых процедур в этом сценарии. Надеюсь это поможет.
Что ж, я гость, если мы говорим, что нет способа указать Hibernate читать только определенные столбцы в ResultSet, возвращаемом StoreProcedur, и что мне нужно создать отдельный POJO для каждого типа набор результатов, тогда это ответ.
Если это так?