EclipseLinkを使用してJPA永続性を持つJava Springプロジェクトがあります。ほとんどの場合、エンティティとデフォルトの実装にJpaRepositoryインターフェイスを使用したいと思いますが、自分のメソッドのいくつかを定義する必要があり、保存のようなデフォルトメソッドをオーバーライドする必要があります。Mavenのインターフェイスメソッド間のあいまいな参照
私のコードはEclipseでコンパイルすると機能しますが、Mavenでコンパイルするときに曖昧な参照エラーが発生します。
私が行っていることは、この(私は保存するエンティティに特定の物事を行う必要があるので、例えば保存上書きすることができます)です:私は上で実行するためにそれをコンパイルするときにこれはEclipseで正常に動作
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。オブジェクトReportRepository reportRepositoryにはJPAリポジトリ実装のメソッドとカスタムメソッドがあり、reportRepository.save(...)を呼び出すとカスタム保存メソッドが呼び出されます。しかし、私はMavenをインストールするか、コンパイラはあいまいな参照文句:
[ERROR] /C:/ユーザー/ヤルノ/ gitの/ Korjaamotestiraportointi/srcに/メイン/ javaの/ FI/testcenter /サービス/ ReportService.java:[40,40] 保存への参照はあいまいです両方のメソッド fi.testcenter.repository.ReportRepositoryCustomおよびメソッドsave(S) in org.springframeworkに保存(fi.testcenter.domain.report.Report) .data.repository.CrudRepository match
私のリポジトリは少し複雑です。 JPAリポジトリ用の既成の実装を使用したいと思います。余分なものをコーディングする必要はありません。私のコードは、すべてをきれいに保ちます。サービスの参照として使用されるリポジトリインタフェースは、すべてのエンティティに対して同じ方法で名前が付けられ、メソッドも同じ名前が付けられ、カスタムメソッドやオーバーライドはカスタムインターフェイスと実装を通じて行われます。不要なコードをどこにでも書く必要はありません。しかし、私はMavenで私の問題に遭遇しました。
Eclipse Tomcatサーバーで初めてMavenを実行して、自分のコードをMavenでコンパイルすることができました。しかし、Maven CleanをインストールしてからMavenをインストールすると、エラーが発生します。そして明らかに、私はMavenでコンパイルする際に何らかのハックに頼る必要はありません。
Mavenでこれを行うための修正がありますか?あるいは、私がここでやりたいことをコーディングする別の方法がありますか?
[Spring JPA CrudRepsoitoryクラスに既に保存方法があります](https://docs.spring.io/spring-data/commons/docs/current/api/org/springframework/data/repository/CrudRepository.html#save- S-)、なぜ同じ署名であなた自身を守っているのですか? –
@Sagar Rohankarエンティティをデータベースに保存する前に、特定の処理を行う必要があるため、デフォルトのメソッドをオーバーライドします。メソッドの名前を別にしたくないので、特定のエンティティでsave以外の名前でカスタムメソッドを呼び出す必要があることを覚えておく必要があります。 – hubbabubba
は 'ReportRepository'インターフェースで' ReportRepositoryCustom'を拡張しません。 –