【发布时间】:2011-11-28 02:12:03
【问题描述】:
我正在尝试创建一个返回 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:无法找到实体类:Long ... 引起:java.lang.ClassNotFoundException: Long
Java 在 java.lang 中找不到 Long?
感谢您提供任何线索
编辑:我尝试删除“结果类”注释:
<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>
然后从返回的 pojo 中拉出所需的 case_id。
【问题讨论】: