Одна услуга Два репо - PullRequest
       17

Одна услуга Два репо

0 голосов
/ 27 мая 2020

Заголовок, как показано ниже. Проблема в том, что когда я вызываю EDIRepoName.findById (shortName), я получаю сообщение об ошибке, подразумевающее использование неправильного репо. (Я гарантирую, что короткое имя уникально, но мне нужно его искать.)

среда, 27 мая, 09:43:49 EDT 2020 Произошла непредвиденная ошибка (тип = Внутренняя ошибка сервера, статус = 500). Указан идентификатор неправильного типа для класса com.example.ta_edi.model.EDIType. Ожидается: класс java .lang.Long, получен класс java .lang.String; вложенное исключение

public class EDITypeService {
    @Autowired
    EDITypeRepository ediRepo;
    @Autowired
    EDITypeNameRepository ediRepoName;

public interface EDITypeRepository extends CrudRepository<EDIType,Long> {   

}

public interface EDITypeNameRepository extends CrudRepository<EDIType,String> {
}



public Optional<EDIType> getByShort(EDIType ediType) {
        //dangerous.assume shortName is unique.
        String shortName = ediType.getShortName();
        Optional<EDIType> found = ediRepoName.findById(shortName);
        return found; 
    }

Обновлено: Могу ли я не иметь репозиторий, который выполняет поиск по непервичному ключу? Если так, это объяснило бы ошибку. Тогда как мне выполнить поиск по другому ключу, кроме первичного?

@Entity
public class EDIType {
    @Id
    @GeneratedValue
    Long index;
    @CreationTimestamp
    LocalDateTime created;
    @UpdateTimestamp
    LocalDateTime updated;
    String shortName; 
    String processType; 
    @Lob
    Clob xmlFile;

Спасибо, но я сначала выполнил эту модификацию ниже, а второй получил ошибку

public interface EDITypeNameRepository extends CrudRepository<EDIType,String> {     
    @Query("SELECT p FROM EDIType WHERE LOWER(p.shortName)=LOWER(:shortName)")
        public List<EDIType> byShortName(@Param("shortName") String shortName);

}

Ошибка создание bean-компонента с именем 'EDITypeNameRepository': FactoryBean выдал исключение при создании объекта; вложенное исключение: java .lang.IllegalArgumentException: ошибка проверки для запроса для метода publi c abstract java .util.List com.example.ta_edi.repository.EDITypeNameRepository.byShortName (java .lang.String)!

Ответы [ 2 ]

1 голос
/ 27 мая 2020

Показать исходный код EDIType. Похоже, проблема есть - у вашей сущности есть Long id, но нет String

. Значит, ваш id длинный. Просто добавьте метод findByShortName для исправления репозитория и вызовите его.

0 голосов
/ 27 мая 2020

Для поиска по shortName не нужно два репозитория. Просто добавьте метод findByShortName к EDITypeRepository

public interface EDITypeRepository extends CrudRepository<EDIType,Long> {   
     Optional<EDIType> findOneByShortName(String name) 
}

Для решения вашей проблемы будет достаточно

...