繁体   English   中英

Spring 数据 JPA Class 没有构造函数的投影

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM