我有一个使用 EclipseLink 实现 JPA 持久性的 Java Spring 项目。我想为我的实体使用 JpaRepository 接口,并在大多数情况下使用默认实现,但我还需要定义一些我自己的方法,并且有时需要覆盖默认方法,例如 save。
我的代码在 Eclipse 中编译时可以工作,但在使用 Maven 编译时不断收到不明确的引用错误。
我所做的是这样的(例如覆盖保存,因为我需要对要保存的实体执行某些操作):
public interface ReportRepository extends JpaRepository<Report, Long>, ReportRepositoryCustom {
}
public interface ReportRepositoryCustom {
public Report save(Report report);
public int getReportCountForImporter(Long importerId);
...
}
public class ReportRepositoryCustomImplementation implements ReportRepositoryCustom {
public Report save(Report report) { ... }
public int getReportCountForImporter(Long importerId) { ... }
}
public class ReportService {
@Autowired
private ReportRepository reportRepository;
}
当我编译它在 Tomcat 上运行时,它在 Eclipse 中工作得很好。对象 ReportRepository reportRepository 具有来自 JPA 存储库实现的方法和我的自定义方法,并且当我调用 reportRepository.save(...) 时会调用自定义保存方法。然而,当我执行 Maven Install 时,编译器抱怨引用不明确:
[错误]
/C:/Users/Jarno/git/Korjaamotestiraportointi/src/main/java/fi/testcenter/service/ReportService.java:[40,40]
两种方法对保存的引用都不明确
保存(fi.testcenter.domain.report.Report)在
fi.testcenter.repository.ReportRepositoryCustom 和方法 save(S)
在 org.springframework.data.repository.CrudRepository 匹配
我发现我的存储库编码有点复杂。我想使用 JPA 存储库的现成实现,而不必编写任何额外的代码。我的代码让一切都变得干净整洁。在服务中用作引用的存储库接口对于每个实体都以相同的方式命名,方法也以相同的方式命名,任何自定义方法或覆盖都是通过自定义接口和实现完成的。我不需要在任何地方编写任何不必要的代码。但后来我遇到了 Maven 的问题。
我成功地使用 Maven 编译了我的代码,首先在 Eclipse Tomcat 服务器中运行它。但是如果我先执行 Maven Clean,然后执行 Maven Install,则会收到一堆错误。显然,我不想在使用 Maven 进行编译时诉诸任何形式的 hack。
那么是否有一个修复程序可以让 Maven 执行此操作?或者还有另一种方式来编码我想要在这里做的事情吗?