org.hibernate.MappingException:未知实体:java.lang.Long
我正在尝试创建一个返回长字符串的命名本机查询 这是我的orm.xml文件(尽可能简化)org.hibernate.MappingException:未知实体:java.lang.Long,hibernate,orm,jpa-2.0,Hibernate,Orm,Jpa 2.0,我正在尝试创建一个返回长字符串的命名本机查询 这是我的orm.xml文件(尽可能简化) 从comm_id=(?1)的通信中选择case_id 这是我得到的错误: ERROR-org.hibernate.impl.SessionFactoryImpl-命名查询中的错误:getCaseNumberByCommId [coral:launch]org.hibernate.MappingException:未知实体:java.lang.Long 我也尝试过只指定“Long” 从comm_id=(?
从comm_id=(?1)的通信中选择case_id
这是我得到的错误:
ERROR-org.hibernate.impl.SessionFactoryImpl-命名查询中的错误:getCaseNumberByCommId
[coral:launch]org.hibernate.MappingException:未知实体:java.lang.Long
我也尝试过只指定“Long”
从comm_id=(?1)的通信中选择case_id
奇怪的是,我得到了这个错误:
原因:org.hibernate.AnnotationException:找不到实体类:Long
...
原因:java.lang.ClassNotFoundException:长
Java在Java.lang中找不到Long
谢谢你提供的线索
编辑:我尝试删除“结果类”注释:
<named-native-query name="getCaseNumberByCommId" >
<query>SELECT case_id FROM communications WHERE comm_id =(?1)</query>
</named-native-query>
从comm_id=(?1)的通信中选择case_id
并获取以下错误:
嵌套的异常为org.hibernate.cfg.NotYetImplementedException:尚不支持纯本机标量查询
更新*
我从来没有找到这样做的方法,但是由于数据库对comm_id有唯一性约束,所以我可以只返回一个映射的pojo对象而不是计数
e、 g
从通信中选择*,其中通信id=(?1)
然后从返回的pojo中提取所需的案例id。不必进一步研究,
结果类应该是映射的实体之一
由于Long
不是您的实体之一,因此您将收到注释异常
尝试从映射中删除结果类
,因为它仅用于生成返回实体
对象的查询
编辑:
关于:org.hibernate.cfg.NotYetImplementedException:纯本机标量查询尚不受支持
:
经过一番快速的挖掘,我发现:
我在那里读到:
解决方法是使用Session.createSQLQuery()或straight JDBC执行此类查询
这里有两个此类查询的示例:
i、 e
sess.createSQLQuery(“从猫中选择*).list()代码>
sess.createSQLQuery(“从猫中选择ID、姓名、出生日期”).list()代码>
或者在示例18.4中进一步
选择p.NAME作为名称,
p、 随着年龄的增长,
来自人员p,其中p.名称如“Hiber%”
从comm_id=(?1)的通信中选择case_id
像这样的东西对我很有用。谢谢,我试图删除结果类注释,但出现了以下错误:嵌套异常为org.hibernate.cfg.NotYetImplementedException:纯本机标量查询尚未启动supported@slashdottir这些额外的信息对你有帮助吗?还是你用另一种方法解决了它?我最终不得不放弃返回一个Long,并最终返回一个mapped而不是pojo对象。。。。因为事实证明,在数据库中存在唯一性约束,这意味着每个标识符只有一行,所以我能够以这种方式解决这个问题
<named-native-query name="getCaseNumberByCommId" result-class="Long">
<query>SELECT case_id FROM communications WHERE comm_id =(?1)</query>
</named-native-query>
<named-native-query name="getCaseNumberByCommId" >
<query>SELECT case_id FROM communications WHERE comm_id =(?1)</query>
</named-native-query>
<named-native-query name="getByCommId" result-class="com.foo.model.Communication">
<query>SELECT * FROM communications WHERE comm_id =(?1)</query>
</named-native-query>
<sql-query name="mySqlQuery">
<return-scalar column="name" type="string"/>
<return-scalar column="age" type="long"/>
SELECT p.NAME AS name,
p.AGE AS age,
FROM PERSON p WHERE p.NAME LIKE 'Hiber%'
</sql-query>
<named-native-query name="getCaseNumberByCommId">
<query>SELECT case_id FROM communications WHERE comm_id =(?1)</query>
</named-native-query>