Я пытаюсь создать именованный-native-запрос, который возвращает Long.
Вот мой ORM.xml (максимально упрощенный)
<?xml version="1.0" encoding="UTF-8"?>
<entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm orm_2_0.xsd"
version="2.0">
<named-native-query name="getCaseNumberByCommId" result-class="java.lang.Long">
<query>SELECT case_id FROM communications WHERE comm_id =(?1)</query>
</named-native-query>
</entity-mappings>
это ошибка, которую я получаю:
ОШИБКА - org.hibernate.impl.SessionFactoryImpl - Ошибка в именованном запросе: getCaseNumberByCommId [coral: launch] org. hibernate.MappingException: Неизвестный объект: java.lang.Long
Я также пробовал просто указать "Long"
<named-native-query name="getCaseNumberByCommId" result-class="Long">
<query>SELECT case_id FROM communications WHERE comm_id =(?1)</query>
</named-native-query>
и, как ни странно, получил эту ошибку:
Вызвано: org.hibernate.AnnotationException: Невозможно найти объект -class: Long ... Вызвано: java.lang.ClassNotFoundException: Long
Java не может найти Long в java.lang?
Спасибо за любые подсказки
edit : Я попытался удалить аннотацию «класс результата»:
<named-native-query name="getCaseNumberByCommId" >
<query>SELECT case_id FROM communications WHERE comm_id =(?1)</query>
</named-native-query>
и получил эту ошибку:
вложенное исключение - org.hibernate.cfg.NotYetImplementedException: Pure собственные скалярные запросы пока не поддерживаются
Обновление *
Я так и не нашел способа сделать это, но поскольку база данных имела ограничение уникальности на comm_id, я мог просто вернуть сопоставленный объект pojo вместо графа.
например.
<named-native-query name="getByCommId" result-class="com.foo.model.Communication">
<query>SELECT * FROM communications WHERE comm_id =(?1)</query>
</named-native-query>
, а затем извлечь желаемый case_id из возвращенного pojo.