bel*_*kkk 6 hibernate projection spring-data-jpa
让我们考虑这些实体
@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
}
Run Code Online (Sandbox Code Playgroud)
还有这个用于与存储库类一起投影的接口
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();
}
Run Code Online (Sandbox Code Playgroud)
现在,如果我查看生成的 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
Run Code Online (Sandbox Code Playgroud)
生成的查询应该是这样的
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
Run Code Online (Sandbox Code Playgroud)
有人可以解释这种行为还是这是一个错误?我们还有什么其他选择可以达到这种结果。我已经尝试过 JPA entitygraph,但是在 hibernate 中还没有完全支持图形类型提取,我也不想使用构造函数 jpql 查询。谢谢 !
如果理解正确,问题是选择的属性/列多于填充投影所需的属性/列。
正如我刚刚在问题 DATAJPA-1218 中所描述的,这就是当前 Spring Data 中投影的工作方式。引用实体的属性不限于投影中使用的属性。
| 归档时间: |
|
| 查看次数: |
2157 次 |
| 最近记录: |