当前位置: 首页 > 知识库问答 >
问题:

如何在嵌套投影中使用JPA映射原生查询

朱梓
2023-03-14

我有两个表,用户和角色,它们是多对多的

select u.name, r.name, r.uuid
from user u
       join user_role_join urj on urj.user_uuid = u.uuid
       join role r on r.uuid = urj.role_uuid;
Adam | superAdmin | {uuid1}
Adam | admin      | {uuid2}
Lisa | guest      | {uuid3}
...
User
 String name,
 List<Role> roles;

Role
 String name,
 UUID uuid

我正在使用EntityManager进行查询。

我如何使JPA知道映射一个用户和多个角色?

{
 name:Adam
 roles:[
 {
   uuid:{uuid1}
   name:superAdmin
 },
 {
   uuid:{uuid2}
   name:admin
 }
 ]
},
{
 name:Lisa
 roles:[
 {
   uuid:{uuid3}
   name:guest
 }
 ]
} 

共有1个答案

郗俊能
2023-03-14

我不知道为什么需要使用本机查询,但是当涉及集合时,JPA/Hibernate只能在使用实体时提供帮助。

如果您希望避免不必要的选择项,我可以建议您尝试使用带有Blaze-Persistence的JPA模型,因为这是Blaze-Persistence实体视图的完美用例。

我创建了这个库,以便在JPA模型和自定义接口或抽象类定义的模型之间进行简单的映射,就像Spring Data Projects on Steroids一样。其思想是以您喜欢的方式定义目标结构(域模型),并通过JPQL表达式将属性(getter)映射到实体模型。

@EntityView(User.class)
public interface UserDto {
    @IdMapping
    UUID getId();
    String getName();
    Set<RoleDto> getRoles();

    @EntityView(Role.class)
    interface RoleDto {
        @IdMapping
        UUID getUuid();
        String getName();
    }
}

userdto a=entityviewmanager.find(entityManager,userdto.class,id);

Spring数据集成使您可以像使用Spring数据投影一样使用它:https://persistence.blazebit.com/documentation/entity-view/manual/en_us/index.html#spring-data-features

 类似资料:
  • 我有这些实体-项目 和- 我需要运行此sql查询: 我在ItemRepository中使用了这个[1],但性能不好。它正在检索项目和类别中的所有字段(包括我不需要的与类别的联接)。 [1] 我正在尝试使用命名查询和投影来提高性能,但我似乎一事无成。我一直遇到-<代码>验证失败,无法查询方法公共抽象java。util。列出findByItemSet(长)。我尝试创建一个DTO类和一个接口来做同样的事

  • 我是Spring Data投影的新手,我正在尝试在一个新项目中使用此功能。 特别是,我想在与复杂查询关联的回购方法上使用投影。 我用注释注释了我的方法,并声明了一个JPA查询,其中包含几个连接的表/实体和一个复杂的where条件。 在本文中,我了解到可以使用基于接口的投影和基于类的投影,但只有第一个支持嵌套投影。 我需要嵌套投影,但似乎只有使用基于接口的投影才支持此功能,并且这种方法仅适用于自动生

  • 我有一个关于嵌套列表投影界面用法的问题。我有两个实体(父和子)(它们有单向关联) 父级=> 子=> 我有两个选择特定列投影界面。 这个查询可以工作,但是它选择ChildEntity的所有列,并且只将id、name propeties映射到ChildProjection。(生成的查询选择所有列,但我想只选择id和name列) 我如何只选择id和name列(为嵌套列表投影界面选择特定列)并映射到Chi

  • 我有以下MySQL查询。我尝试了spring data jpa中的接口投影,但是投影字段id是UUID。所以它不会被映射到界面投影中。所以我想尝试POJO投影,但它不起作用。

  • 问题内容: 我需要像下面这样转换一个Hibernate条件查询 但是在JPA(2)中,我不知道如何实现投影-在这种情况下-是总和。奇怪的是,Hibernate和JPA(甚至是Hibernate JPA 2)具有如此巨大的差异,尤其是在条件查询中。 我开始 但是不知道如何在这里实现投影,也没有别名 问题答案: 这是一个老问题,但让我们举个例子: 使用Hibernate,与Hibernate不同,您总

  • 我试图通过示例查询来过滤数据。它适用于实体和基本体,但不适用于投影。你知道SpringDataJpa中是否有这样的功能吗?