0
Это мой класс сущности.Spring Framework: findBy throws Недопустимый аргумент
@Entity
public class Profile {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long profileId;
@Transient
private String name;
@ElementCollection(fetch = FetchType.EAGER)
private Map<String, String> trNames; //Key: LanguageCode, Value: translated text
...
}
ProfileRepository Класс
public interface ProfileRepository extends JpaRepository<Profile, Long> {
//This method should go through the Map Collection and return a profile whose name matches the given parameter value.
Profile findByTrNames(String code, String name);
}
Я создал тестовый класс JUnit, чтобы проверить этот метод. Эта строка кода
Profile found = repository.findByTrNames("en", "Interview IT");
бросает исключение.
org.springframework.dao.InvalidDataAccessApiUsageException: Parameter value [en] did not match expected type [java.util.Map]; nested exception is java.lang.IllegalArgumentException: Parameter value [en] did not match expected type [java.util.Map]
at org.springframework.orm.jpa.EntityManagerFactoryUtils.convertJpaAccessExceptionIfPossible(EntityManagerFactoryUtils.java:301)
at etc..
Может ли кто-нибудь мне помочь?
спасибо.
большой .. Это делает действительно. :) Не могли бы вы, возможно, объяснить, почему это заставило исключение? Почему он ожидал тип java.util.Map? –
'spring-data' строит запрос на основе вашего объявленного имени метода, которое является' findByTrNames'. Так как 'trNames' имеет тип' Map', он ожидает, что параметр будет также 'Map'. Я согласен, что это может быть немного умнее, когда дело доходит до полей «Карта» в сущности, поскольку они несколько специфичны, и имеет смысл, что два параметра в методе могут быть интерпретированы как ключ и значение. –
Да, я понимаю это сейчас. Огромное спасибо. :) –