JPA / HIBERNATE:如何查询返回非实体对象或带有内部非实体对象的对象列表?

托马斯·菲亚乌科夫斯基(TomaszFijałkowski)

有没有办法将一个自定义对象作为另一个自定义对象的内部对象包含在内?例如,我有两个实体:

@Entity
class Foo {
    @Id
    private int id;

    @Column
    private String a;

    @Column
    private String b;

    @OneToMany(...)
    private Set<Bar> bars;

    ...
}

@Entity
class Bar {
    @Id
    private int id;

    @Column
    private String x;

    @Column
    private String y;

    @Column
    private String z;

    ...
}

我想编写一个查询,选择一个FooQueryResult对象,例如:

class FooQueryResult {
    private String a;
    private Set<BarQueryResult> bars;

    ...
}

class BarQueryResult {
    private String id;
    private String x;

    ...
}

我正在尝试类似下面的内容

String query =
        "SELECT " +
                "s.a, " +
                "new package.BarQueryResult(f.bars.id, f.bars.x) " +
        "FROM Foo as f " +
        "WHERE f.id = ?1";

FooQueryResult site = factory.createEntityManager()
        .createQuery(query, FooQueryResult.class)
        .setParameter(1, fooId)
        .getSingleResult();

但这以错误结尾:

QuerySyntaxException: unexpected token: , near line 1, column 14 [SELECT s.a, new package.BarQueryResult(f.bars.id, f.bars.x) FROM package.Foo as f WHERE f.id = ?1]

有可能这样做吗?

伊德米特列耶夫

开箱即用是不可能的。您应该使用select new构造函数表达式,但是有一个限制-不支持嵌套构造函数调用,您不能编写select new FooQueryResult(..., new BarQueryResult)
,也可以使用自定义ResultSetTransformer。但是我建议创建Transformer类并手动进行。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Spring Data JPA:查询如何返回非实体对象或对象列表?

Querydsl本机JPA查询返回实体而不是对象数组

如何从Spring / JPA / Hibernate中的嵌套实体获取对象?

如何响应 Spring RestController 返回 ManyToOne 双向 JPA 实体对象?

Hibernate / JPA将本机查询的结果映射到非实体持有实体

Spring Data JPA:是否可以定义包含非实体对象字段的实体?

JPA获取实体对象的ID

如何在Spring Mvc Jpa中将实体对象列表转换为页面对象?

JPA使用存储库findBy与实体对象

从 JPA 实体创建 Gson 对象 throwingStackOverflowError 异常

您是直接通过http传递hibernate / jpa实体对象,还是有更好的选择?

JPA实体管理器与合并的对象没有变化

如何将I18n作为JPA或Hibernate实体的JSON对象实现?

JPA Hibernate - 如何从连接的两个实体中保存两个对象

选择使用JPA的非实体?

如何将对象转换为 JPA 中的实体

如何实现修改“ JPA实体-对象结构”的参数变量?

如何从JPA的父实体记录中删除子对象?

JPA:返回多个实体的查询

当返回实体对象时,Spring JPA更改实体布尔变量名称

JPA 返回空对象

JPA可嵌入对象-每个实体多个,所有实体一个表

带有实体管理器getResultList()方法的JPA实体图以响应形式返回任何类型的实体列表

JPA映射本地查询结果为非实体DTO

JPA / Hibernate:CriteriaBuilder-如何使用关系对象创建查询?

从JPA查询返回页面对象

具有动态对象模型的JPA / Hibernate

Spring JPA - 读取实体列表(只有部分属性)并更新值而不从数据库中选择整个对象?

JPA:传递给持久对象的分离实体:嵌套异常是org.hibernate.PersistentObjectException