Подтвердить что ты не робот

Как вы создаете запрос 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?

4b9b3361

Ответ 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>.