StatementCallback;плохая грамматика SQL только при развертывании в Heroku - PullRequest
0 голосов
/ 19 мая 2019

Я создал Spring-Boot приложение, которое использует jdbctemplate, все отлично работает на localhost, но когда я развертываю свое приложение в Heroku и посещаю конечную точку, я получаю эту информацию:

StatementCallback; bad SQL grammar [SELECT id, name, price, image, description FROM products;]; nested exception is org.postgresql.util.PSQLException: ERROR: relation "products" does not exist Position: 49

ЕслиSQL-запрос плох, тогда как вообще возможно, что одно и то же приложение работает на локальной машине?

Вот метод с использованием jdbcTemplate, который я использую:

public Products getProductsList() {
    ArrayList<Product> productsList = new ArrayList<>();

    jdbcTemplate.query(
            "SELECT id, name, price, image, description FROM public.products;",
            (rs, rowNum) -> new Product(rs.getInt("id"), rs.getString("name"), rs.getFloat("price"), rs.getString("image"), rs.getString("description"))
    ).forEach(product -> productsList.add(product));

    return new Products(productsList);
}

Ответы [ 3 ]

0 голосов
/ 20 мая 2019

Вам нужно будет создать таблицы с использованием инфраструктуры миграции, как описано в https://devcenter.heroku.com/articles/running-database-migrations-for-java-apps

0 голосов
/ 22 мая 2019

Хорошо, я починил это.

Heroku по какой-то причине добавил собственную конфигурацию в мой проект (аддон с postgresql) и использовал базу данных из settings-> config vars -> DATABASE_URL вместо базы данных из application.properties.

Я использовал команду из этого ответа в Heroku CLI, чтобы удалить базу данных heroku из моего приложения.

0 голосов
/ 19 мая 2019

Я думаю, вы должны поместить имя вашей схемы в ваш application.properties файл, например, так:

spring.jpa.properties.hibernate.default_schema=public

И напишите ваш запрос так:

SELECT id, name, price, image, description FROM products;

Источник: этот ответ и этот ответ

...