peg*_*sus 7 hibernate spring-data spring-data-jpa
我们想在界面一上使用 DTO 投影,因此我们创建了以下 DTO 对象:
人事部
@Data
@Builder
@AllArgsConstructor
public class PersonDto {
private String name;
private String email;
private AddressDto address;
}
Run Code Online (Sandbox Code Playgroud)
地址Dto
@Data
@Builder
@AllArgsConstructor
public class AddressDto {
private String address;
private String streetNumber;
}
Run Code Online (Sandbox Code Playgroud)
一个仓库
@Repository
public interface PersonRepository extends JpaRepository<PersonEntity, Long> {
List<PersonDto> findAllDtoedBy();
}
Run Code Online (Sandbox Code Playgroud)
但是,当被调用时,我们得到了异常:
Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: Unable to locate appropriate constructor on class [com.example.projections.model.PersonDto]. Expected arguments are: java.lang.String, java.lang.String, com.example.projections.model.AddressEntity [select new com.example.projections.model.PersonDto(generatedAlias0.name, generatedAlias0.email, address) from com.example.projections.model.PersonEntity as generatedAlias0 left join generatedAlias0.address as address]
at org.hibernate.hql.internal.ast.QuerySyntaxException.convert(QuerySyntaxException.java:74) ~[hibernate-core-5.2.11.Final.jar:5.2.11.Final]
at org.hibernate.hql.internal.ast.ErrorCounter.throwQueryException(ErrorCounter.java:91) ~[hibernate-core-5.2.11.Final.jar:5.2.11.Final]
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:272) ~[hibernate-core-5.2.11.Final.jar:5.2.11.Final]
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:189) ~[hibernate-core-5.2.11.Final.jar:5.2.11.Final]
Run Code Online (Sandbox Code Playgroud)
注意行: “......预期的论点是:java.lang.String中,java.lang.String中,com.example.projections.model AddressEntity ......”。
显然,它需要模型对象AddressEntity,并且在找到DTO 对象(AddressDto)时会感到困惑。
所以问题是,由于这适用于界面投影,我们希望 DTO 投影也支持它?通过查看 GitHub 上的示例 ( https://github.com/spring-projects/spring-data-examples/blob/master/jpa/example/src/main/java/example/springdata/jpa/projections/CustomerRepository。 java ) 和 Spring Data JPA 文档中,我们没有看到这种情况的示例,但我们也没有看到不支持的明确声明
定义投影的另一种方法是使用值类型 DTO,这些 DTO 保存应该检索的字段的属性。这些 DTO 类型的使用方式与投影接口的使用方式完全相同,除了此处不进行代理并且不能应用嵌套投影。
我想原因是这个...
| 归档时间: |
|
| 查看次数: |
9685 次 |
| 最近记录: |