我有一个愚蠢的问题。我不明白为什么我的使用Projections的Spring Data Repository方法会产生此编译错误。
我有一个存储库类
@Repository
public interface MyClassRepository extends JpaRepository<MyClass, Long> {
Page<MyProjection> getResultsByParam(@Param("param") Long personId,
Pageable pageable, Sort sort);
}
和投影(我有一个大型的休眠连接对象,从中只需要几个字段)
public interface MyProjection {
Type getType();
Status getStatus();
SubItem getDocument();
interface SubItem {
String getName();
}
}
当我尝试从服务中调用方法时,会得到
error: The return type is an abstract class or interface. Provide a non abstract / non interface result type or a factory method.
我这样称呼服务为编译错误。
myClass.getResultsByParam(param, page, sort)
我很确定,这里确实有一些简单的错误...
答案 0 :(得分:0)
Spring数据自动生成代码以实现该存储库接口。此代码将包含创建结果对象的代码。为了能够创建结果对象,该对象必须是可实例化的。不是抽象类和接口。
您必须将接口方法更改为类似
Page<MyProjectionImpl> getResultsByParam(@Param("param") Long personId,
Pageable pageable, Sort sort);
其中MyProjectionImpl
是一个@Entity
,具有默认的构造函数和属性的getter / setter,因此Spring Data可以填充它们。