Java: как переопределить этот универсальный метод?
public List save(Iterable entities) {
//...
}
Если я использую следующий метод для переопределения
@Override
public List save(Iterable structures) {
List result = new ArrayList();
//...
return result;
}
Я получаю следующую ошибку:
method does not override or implement a method from a supertype
name clash: save(Iterable) in MyTypeRepositoryImpl and save(Iterable) in SimpleJpaRepository have the same erasure, yet neither overrides the other
where S,T are type-variables:
S extends T declared in method save(Iterable)
T extends Object declared in class SimpleJpaRepository
Как я могу решить это? Я неЭтот метод не должен быть универсальным, и на самом деле его не должно быть. Я имею в виду, что
@Override
public List save(Iterable structures) {
List result = new ArrayList();
//...
return result;
}
Не будет работать, так как метод может создать новый объект MyType, который не "совместимый» к списку.
Как я могу сделать эту работу?
РЕДАКТИРОВАТЬ:
В целях разъяснения. Я'я пытаюсь переопределить различные методы save () данных Spring SimpleJpaRepository (который расширяется QuerydslJpaRepository)
Определения класса:
public class MyTypeRepositoryImpl
extends QueryDslJpaRepository
implements MyTypeRepository
@NoRepositoryBean
public interface MyTypeRepository
extends JpaRepository,
QueryDslPredicateExecutor
И это (из Spring Data)
public class QueryDslJpaRepository
extends SimpleJpaRepository
implements QueryDslPredicateExecutor
РЕДАКТИРОВАТЬ 2:
Метод вызывает save (MyType entity) для каждого элемента, и этот метод содержит следующую логику:
сущность имеет поле, которое является уникальнымполучить значение этого поля и проверить, существует ли сущность с таким значениемесли да, используйте эту сущность (вызов entityManager.merge) -> не работает возвращает MyType не Sесли нет создать новый -> здесь создается новый объект. Не работает с универсальным типомДля 4. Я могу просто установить id = null и использовать переданный объект. Это не работает для 3.
Так что я'Я очень озадачен, почему этот метод имеет эту подпись. Это делает его непригодным для меня, и я неПочему бы не сохранить подкласс T с помощью Ts DAO. Методы сохранения являются единственными с. Все остальные просто используют T. Я мог бы просто привести к S, чтобы он компилировался, но это тоже выглядит ужасно ... так как любой другой тип, кроме T, приведет к исключению.