Как вы создаете запрос findWy репозитория Spring JPA, используя свойство, содержащее ключевое слово?
Вот упрощенный пример моей проблемы. У меня есть этот репозиторий и класс сущностей.
public interface ThingRepository extends JpaRepository<ThingEntity, Long> {
ThingEntity findByFooInAndBar(String fooIn, String bar);
}
@Entity
public class ThingEntity {
@Column(name="FOO_IN", nullable=false, length=1)
private String fooIn;
public String getFooIn() {
return fooIn;
}
public setFooIn(String fooIn) {
this.fooIn = fooIn;
}
/* not including bar property for brevity sake */
}
Spring выбрасывает следующее исключение.
org.springframework.data.mapping.PropertyReferenceException: No property foo found for type ThingEntity!
Похоже, что Spring принимает метод findByFooInAndBar
и считает, что foo
- мое имя свойства и in
- это ключевое слово для соответствия значений внутри коллекции.
Как мне понять, что имя свойства fooIn
, а не foo
?
Ответы
Ответ 1
Чтобы решить эту проблему, я вручную определял запрос с помощью аннотации @Query
. Я с удовольствием соглашусь, что кто-нибудь еще ответит, найдет ли решение, не требующее ручного запроса.
public interface ThingRepository extends JpaRepository<ThingEntity, Long> {
@Query("SELECT t FROM Thing t WHERE t.fooIn = ?1 AND t.bar = ?2")
ThingEntity findByFooInAndBar(String fooIn, String bar);
}
Ответ 2
Spring анализирует 'In' в вашем методе для создания запроса, проверяя ссылку для создания вашего запроса, вы должны изменить имя переменной fooIn на fooin или что-то в этом роде....
Ответ 3
Я любезно наблюдал за кодом и заметил, что ваше возвращение - не list
а object
.
Измените эту часть на List<ThingEntity>
.