Ich habe ein Java-Spring-Projekt mit JPA-Persistenz mit EclipseLink. Ich möchte JpaRepository-Schnittstellen für meine Entitäten und die Standardimplementierungen für die meisten Fälle verwenden, aber ich muss auch einige meiner eigenen Methoden definieren, und ich muss manchmal die Standardmethoden wie Speichern überschreiben.Maven mehrdeutige Referenz zwischen Interface-Methoden
Mein Code funktioniert, wenn in Eclipse kompiliert, aber ich bekomme immer einen mehrdeutigen Referenzfehler beim Kompilieren mit Maven.
Was ich getan habe ist dies (zB speichern außer Kraft zu setzen, weil ich brauche bestimmte Dinge an das Unternehmen zu tun, um gerettet zu werden):
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;
}
Diese feine in Eclipse funktioniert, wenn ich es kompilieren auf denen sie laufen Kater. Das Objekt ReportRepository reportRepository verfügt über Methoden aus der JPA-Repository-Implementierung und meinen eigenen Methoden. Die benutzerdefinierte Save-Methode wird aufgerufen, wenn ich reportRepository.save (...) aufruft. Allerdings, wenn ich Maven installiere, beschwert sich der Compiler eine unklare Referenz:
[ERROR] /C:/Users/Jarno/git/Korjaamotestiraportointi/src/main/java/fi/Testcenter/service/ReportService.java:[40,40] Referenz zu speichern ist mehrdeutig beide Methode Speichern (fi.testcenter.domain.report.Report) in fi.testcenter.repository.ReportRepositoryCustom und Methode speichern (S) in org.springframework .data.repository.CrudRepository Übereinstimmung
Ich habe die Codierung meiner Repositories ein wenig kompliziert gefunden. Ich möchte die vorgefertigten Implementierungen für JPA-Repositories verwenden und muss nichts extra programmieren. Mein Code hält alles schön und sauber. Die Repository-Schnittstelle, die als Referenz in Services verwendet werden soll, wird für jede Entität auf dieselbe Weise benannt, und Methoden werden auch gleich benannt, und benutzerdefinierte Methoden oder Außerkraftsetzungen werden über benutzerdefinierte Schnittstellen und Implementierungen ausgeführt. Ich muss nirgendwo unnötigen Code schreiben. Aber dann stieß ich auf mein Problem mit Maven.
Ich habe es geschafft, meinen Code mit Maven zu kompilieren, indem ich ihn zuerst in Eclipse Tomcat Server laufen lasse. Aber wenn ich Maven Clean und dann Maven Install mache, bekomme ich eine Reihe von Fehlern. Und ich möchte natürlich nicht auf irgendeinen Hack zurückgreifen müssen, um Maven zu kompilieren.
Also gibt es eine Lösung, die dies mit Maven tun würde? Oder gibt es eine andere Art zu kodieren, was ich hier machen möchte?
[Spring JPA CrudRepsoitory Klasse haben bereits speichern Methode] (https://docs.spring.io/spring-data/commons/docs/current/api/org/springframework/data/repository/CrudRepository.html#save- S-), warum benennst du deine eigene Signatur? –
@Sagar Rohankar Die Standardmethode überschreiben, weil ich bestimmte Dinge vor dem Speichern der Entität in der Datenbank tun muss. Ich möchte die Methode nicht anders benennen und muss daran denken, dass ich für bestimmte Entitäten eine benutzerdefinierte Methode mit einem anderen Namen als save aufrufen muss. – hubbabubba
dann erweitern Sie 'ReportRepositoryCustom' in' ReportRepository' nicht. –