spring jpa嵌套投影生成不正确的查询

2024-03-26

让我们考虑这些实体

@Entity
public class Room{

  @Id
  private Integer id;

  private String number;

  private String floor;

  @ManyToOne
  private RoomType roomType;

  // Setters & Getters  
}

@Entity
public class RoomType{

  @Id
  private Integer id;

  private String name;

  private String description;

  private Boolean enabled;

  // Setters & Getters  
}

还有这个与存储库类一起投影的接口

public interface RoomList{

    public Number getId();

    public String getNumber();

    public RoomType getRoomType();

    interface RoomType {
        String getName();
    }   

}

@Repository
public interface RoomRepository extends JpaRepository<Room,Integer>{

    public Collection<RoomList> findAllProjectedBy();

}

现在,如果我查看生成的 SQL

select
    room0_.id as col_0_0_,
    room0_.number as col_1_0_,
    roomtype1_.id as id1_3_,
    roomtype1_.description as descript2_3_,
    roomtype1_.enabled as isActive3_3_,
    roomtype1_.name as name5_3_ 
from
    Room room0_ 
inner join
    roomType roomtype1_ 
        on room0_.roomType_id=roomtype1_.id

生成的查询应该是这样的

select
    room0_.id as col_0_0_,
    room0_.number as col_1_0_,
    roomtype1_.name as name5_3_ 
from
    Room room0_ 
inner join
    roomType roomtype1_ 
        on room0_.roomType_id=roomtype1_.id

有人可以解释这种行为还是这是一个错误?我们还有哪些其他选择可以实现这种结果。我已经尝试过 JPA 实体图,但 hibernate 中尚未完全支持图形类型获取,我也不想使用构造函数 jpql 查询。谢谢 !


如果理解正确,则问题是选择的属性/列比填充投影所需的属性/列多。

正如我刚才所描述的问题 DATAJPA-1218 https://jira.spring.io/browse/DATAJPA-1218这就是当前 Spring Data 中投影的工作方式。引用实体的属性不限于投影中使用的属性。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

spring jpa嵌套投影生成不正确的查询 的相关文章

随机推荐