Основной В спящем режиме использование проблем и SQL-запрос

У меня есть Объект 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?

Спасибо

1
задан marc_s 10 October 2016 в 16:44
поделиться

2 ответа

Спасибо за код. Я не уверен на 100% в этом, но я считаю, что запросы SQL Hibernate должны возвращать все поля объекта, для которого требуется создать экземпляр запроса.

Вы можете попробовать альтернативное решение - положиться на HQL и создать экземпляр объекта по мере необходимости. Например, SELECT new Person (firstName, lastName) from Person p, где p.username = ... Это фактически позволяет вам использовать любой тип (с полями соответствующих типов) в ваших запросах.

Это решит вашу непосредственную проблему, но я не уверен, как решить проблему использования хранимых процедур в этом сценарии. Надеюсь это поможет.

2
ответ дан 3 September 2019 в 00:31
поделиться

Что ж, я гость, если мы говорим, что нет способа указать Hibernate читать только определенные столбцы в ResultSet, возвращаемом StoreProcedur, и что мне нужно создать отдельный POJO для каждого типа набор результатов, тогда это ответ.

Если это так?

0
ответ дан 3 September 2019 в 00:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: