org.hibernate.MappingException:未知实体:java.lang.Long

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=(?

我正在尝试创建一个返回长字符串的命名本机查询

这是我的orm.xml文件(尽可能简化)


从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>