1 回答
TA贡献1789条经验 获得超10个赞
你有这个问题,因为你的方法显式返回一个AbstractHistory而不是子类型。
你需要投...
...如果只有您的存储库实现理解每个 T 您都会获得特定的历史记录。
您可以尝试添加另一种类型,但我担心它会失败:
public interface IHistoryRepository<
T,
H extends AbstractHistory<T>
> extends CrudRepository<H, Long> {
public H findFirst();
}
public interface StudentHistoryRepository extends IHistoryRepository<Student, StudentHistory> {}
public interface TeacherHistoryRepository extends IHistoryRepository<Teacher, TeacherHistory> {}
我不知道您使用的是什么框架,可能是名称中的 Spring Data;虽然我过去用过它,但我不知道它是否能够做到这一点。
毕竟,它需要获取具体类,并且由于它是泛型,因此类型擦除可能会干扰(如果关于表示 H 的具体类型的信息在反射中丢失,那么 Spring Data 在这里可能无法做太多事情,除非您用注释或其他东西帮助它)。
另一个应该可行的解决方案是按每个子界面执行此操作:
public interface StudentHistoryRepository extends CrudRepository<StudentHistory, Long> {
StudentHistory findFirst();
}
或者使用另一个接口:
public interface FindFirst<T> {
T findFirst();
}
public interface StudentHistoryRepository extends CrudRepository<StudentHistory, Long>, FindFirst<StudentHistory> {}
添加回答
举报