当前位置: 首页 > 面试题库 >

从bigint转换为long时,如何从表中获取休眠状态的long值列表

郭弘方
2023-03-14
问题内容

使用该getEvents方法时,出现以下异常:

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

public List<Long> getEvents(Person person) {

    String q = "select new java.lang.Long(te.event_id) "
        + "from teachers_event te"
        + "where te.teachers_id = :personId ";
    Query query = entityManager.createNativeQuery(q, Long.class);
    query.setParameter("personId", person.getId());
    return (List<Long>) query.getResultList();
}

teachers_event数据库中的表将教师的ID与事件联系起来。我没有将此表映射到实体。我只想从中获取ID。PostgreSQL表中的ID为bigint。有什么方法可以实现而无需创建单独的类来映射TeacherEvents实体?


问题答案:

在JPA 2.1中,有一个称为“结果集映射”的功能。

基本上,您必须定义一个POJO类,该类将保存结果值(所有值必须使用构造函数传递):

public class IdResult{

    private Object id;

    public IdResult(Object id){
        this.id = id;
    }

     public Long getLongId(){
        return (Long)id;
     }
}

然后,您必须在您的一个实体上声明映射(无论在哪个实体上,它都必须是declated @Entity):

@SqlResultSetMapping(name="IdMapping", classes = {
    @ConstructorResult(targetClass = IdResult.class, 
    columns = {@ColumnResult(name="id")})
})

您必须在查询中使用别名以匹配@ColumnResult名称:

select te.event_id as id
...

最后在查询创建中使用:

Query query = entityManager.createNativeQuery(q, IdMapping.class);
return (List<IdResult>) query.getResultList();

然后,您将在服务层中使用getLongId()



 类似资料:
  • 问题内容: 我在MySQL中有一个ID字段类型为BIGINT的表 在hibernate对象中,我为此字段使用Java Long类型 但是当运行程序时,它会抛出异常: 如何在hibernate状态下映射MySQL BINGINT数据类型? 问题答案: 但是在运行程序时,它将引发异常:预期:类java.lang.Long,得到类java.lang.Integer 为BIGINT 使用a 是正确的,上述

  • 问题内容: 这可能是一个简单的,总机问题,但我的第一次尝试令人惊讶地完全失败了。我想获取一组原始的long并将其转换成一个列表,我试图这样做: 什么是正确的方法? 问题答案: 我发现使用apache commons lang ArrayUtils(JavaDoc,Maven依赖项)很方便 它还具有反向API 编辑:更新以提供完整的转换为列表,如注释和其他修复建议。

  • Code A可以将长值转换为日期值,就像2018.01.10一样 > 我希望得到日期时间值 ,如 2018.01.10 23:11,我该如何使用 Kotlin? 我希望将当前时间转换为长值,我该如何使用Kotlin? 谢谢! 代码A

  • 问题内容: 我试图将long值传递给该方法,并在那里使用它来创建Long Array。但是,在创建数组时,出现“可能从long到int的有损转换”错误 尽管我还没有使用任何整数值。 问题答案: 数组维只能是类型。编译器期望使用该类型,但是您要传递一种类型。您可以更改传递给的参数类型,并进行相应的更改。 为了完整起见,这是JLS关于数组变量的内容 它们由使用非负 整数 索引值的数组访问表达式引用。

  • 我正在解决一个问题,其中的任务是在用户提到的给定行输出pascal三角形的结果。 https://leetcode.com/problems/pascals-triangle-ii/ 我写了我的解决方案,其中有存储巨大阶乘结果的问题。 通过这些问题, 整数类型可以在C中存储哪些范围的值 长到无符号的字节数是多少? 并通过其他一些来源,我进行了以下更改,这给了我所需的结果。 由于“C”是int类型,

  • 问题内容: 我想知道什么是从hibernate查询中获取地图数组的最佳方法。Google表示要迭代query.list(),然后将对象创建/放入空地图数组。 我想会有一些优雅而有效的方法来做到这一点。有人可以给我个主意吗? 问题答案: 参见Hibernate文档-15.6。select子句: 您可以使用以下方式为选定的表达式分配别名: 与选择新地图一起使用时,这非常有用: 该查询返回一个从别名到所