【发布时间】:2018-03-08 05:43:20
【问题描述】:
春季启动:1.5.10 春季数据 JPA:1.11.10
IE 我的实体
class MyEntity{
private Long id;
private String name;
private Integer age;
// getter setter
}
我的投影
interface MyProjection{ String getName() }
MyEntityRepository
...
MyProjection findById(Long Id)
...
当我调用 findById 函数时,生成的 sql 是:
select myentity0_.id, myentity0_.name,myentity0_.age from MyEntity myentity0_ where ...
为什么还要选择年龄列?
【问题讨论】:
-
这看起来很奇怪,我只是在两个不同的项目中做了一个快速测试,一个旧的 Spring-Data 1.5.1 + Hibernate 和一个新的 Spring-Data 1.11.9 + EclipseLink,在这两种情况下只有选择了投影界面中的列。
-
@KlausGroenbaek 我使用 javax.persistence.* 而不是 EclipseLink。你使用 Spring Data JPA 吗?
-
JPA 是一个规范,有很多实现,Spring Boot 的默认 JPA 提供程序是 Hibernate(通常替换为 EclipseLink)。我的测试使用了两个不同的 JPA 提供程序,两个不同版本的 Spring Boot/Data,并且在这两种情况下都只选择了投影中的列。如果你可以在 GitHub 上的独立项目中重现它,我可以看看它。