![](/img/trans.png)
[英]Spring Data JPA Query - class projection containing another custom object
[英]Spring Data JPA Class Projection Without Constructor
我可以有这样的界面投影:
public interface Person {
String getFirstName();
String getLastName();
}
我可以像这样在JpaRepository
中进行 JPQL 查询:
public interface EmployeeRepository extends JpaRepository<Employee, Long> {
@Query("select e.firstName as firstName, e.lastName as lastName from Employee e")
List<Person> fetchEmployeeNames();
}
class 投影等效项如下所示:
public class Person {
private String firstName;
private String lastName;
public Person(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
// getters and setters
}
JPQL 使用这样的构造函数:
public interface EmployeeRepository extends JpaRepository<Employee, Long> {
@Query("select new my.package.Person(e.firstName, e.lastName) from Employee e")
List<Person> fetchEmployeeNames();
}
将接口投影查询与 class 投影一起使用将导致此异常:
org.springframework.core.convert.ConverterNotFoundException: No converter found capable of converting from type [org.springframework.data.jpa.repository.query.AbstractJpaQuery$TupleConverter$TupleBackedMap] to type [my.package.Person]
为什么我不能在不指定构造函数的情况下使用 class 投影,就像接口 JPQL 一样? 无论如何允许 class 投影而不指定构造函数? 我可以创建一个通用转换器来转换为任何 class 投影吗?
你正在尝试的是不可能的。 如果您需要自定义 WHERE 条件,您可以通过接口中的默认方法使用findAll(Specification<Employee> s)
方法来实现这一点。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.