Ошибка проверки запроса для метода publi c, spring jpa? - PullRequest
0 голосов
/ 30 мая 2020

Я создаю api для запроса из БД и возврата результата.

Это запрос

@RequestMapping(value = "/config", params = { "appCode", "appVersion" }, method = RequestMethod.GET)
public List<AppConfig> getConfig(@RequestParam(value = "appCode", required = true) String appCode,
        @RequestParam(value = "appVersion", required = true) String appVersion) {
    return configRepository.findByCodeAndVersion(appCode, appCode);
}

Класс таблицы

@Entity
@Table(name = "app_config")
@EntityListeners(AuditingEntityListener.class)
public class AppConfig {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(columnDefinition = "serial")
private long id;
@Column(name = "app_code", nullable = false)
private String appCode;
@Column(name = "app_name", nullable = false)
private String appName;
@Column(name = "api_url", nullable = true)
private String apiUrl;
@Column(name = "db_name", nullable = true)
private String dbName;
@Column(name = "app_version", nullable = false)
private String appVersion;
}

Репозиторий, в котором у меня есть собственный запрос

@Repository
public interface AppConfigRepository extends CrudRepository<AppConfig, Long> {

@Query("SELECT n FROM AppConfig WHERE n.appCode = ?1 and n.appVersion = ?2")
List<AppConfig> findByCodeAndVersion(String appCode, String appVersion);
}

Выполняется в приложении я получаю исключение

Validation failed for query for method public abstract java.util.List com.api.repository.AppConfigRepository.findByCodeAndVersion(java.lang.String,java.lang.String)!

Ответы [ 2 ]

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

Вы должны добавить псевдоним n после имени объекта AppConfig в запросе, это должно быть примерно так:

@Query("SELECT n FROM AppConfig n WHERE n.appCode = ?1 and n.appVersion = ?2")
List<AppConfig> findByCodeAndVersion(String appCode, String appVersion);

Вы также можете использовать именованный параметр внутри строки запроса следующим образом:

@Query("SELECT n FROM AppConfig n WHERE n.appCode = :appCode and n.appVersion = :appVersion")
List<AppConfig> findByCodeAndVersion(String appCode, String appVersion);

И подобный запрос может быть обработан методами запроса данных Spring, просто не забудьте переименовать метод, чтобы использовать имена полей объекта:

List<AppConfig> findByAppCodeAndAppVersion(String appCode, String appVersion);
0 голосов
/ 30 мая 2020

попробуйте это:

@Query("SELECT FROM AppConfig n WHERE n.appCode = :x and n.appVersion = :y")
List<AppConfig> findByCodeAndVersion(@Param("x")String appCode,@Param("y") String appVersion);

или вы можете использовать непосредственно метод:

List<AppConfig> findByAppCodeAndAppVersion(String appCode,String appVersion);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...