Я пытаюсь создать named-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>
этополученная ошибка:
ERROR - 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: Невозможно найти класс сущности: Long... Причины: java.lang.ClassNotFoundException: Long
Java не может найти Long в java.lang?
Спасибо за любые подсказки
edit : я попытался удалить аннотацию 'result-class':
<named-native-query name="getCaseNumberByCommId" >
<query>SELECT case_id FROM communications WHERE comm_id =(?1)</query>
</named-native-query>
и получить эту ошибку:
вложенным исключением является org.hibernate.cfg.NotYetImplementedException: чистые собственные скалярные запросы еще не поддерживаются
Обновление *
Я никогда не находил способ сделать это, но поскольку база данных имела ограничение уникальности для 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.