Как исправить исключение «java.sql.SQLSyntaxErrorException: неизвестный столбец« product0_.return_policy »в« списке полей »»? - PullRequest
3 голосов
/ 27 марта 2019

Я получаю это «SQLSyntaxErrorException: неизвестный столбец« product0_.return_policy »в« списке полей »», когда я пытаюсь запустить URL-адрес в своем браузере для GET всех продуктов .

Смотрите здесь

Браузер также показывает следующее:

Произошла непредвиденная ошибка (тип = Внутренняя ошибка сервера, статус = 500). не удалось извлечь ResultSet; SQL [н / п]; вложенным исключением является org.hibernate.exception.SQLGrammarException: не удалось извлечь ResultSet

returnPolicy - единственная переменная, вызывающая эту проблему. Я могу успешно извлечь все значения из базы данных, когда удаляю саму переменную как из базы данных, так и из класса Product в Java.

Это метод getAllProducts , который является частью RESTController:

@RequestMapping(method=RequestMethod.GET, value="/products")
    public List<Product> getAllProducts() {
        return productService.getAllProducts();
    }

, который отлично работает, когда я полностью удаляю переменную returnPolicy.

Это описание таблицы MySQL:

Значения, хранящиеся в столбце returnPolicy:

returnPolicy

  0 
  0 
  1 
  1 
  1 

Это код для переменных модели «Продукт»:

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name="product")
public class Product {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;
    private String name;
    private int price;
    private String vendor;
    private String description;
    private Boolean returnPolicy;
* * ProductRepository тысяча сорок-девять
@Repository public interface ProductRepository extends JpaRepository<Product, String>{ }

Есть ли проблема с отображением между SQL tinyint (Boolean) и булевым типом Java?

Ответы [ 2 ]

4 голосов
/ 27 марта 2019

Hibernate предполагает, что поле сущности returnPolicy соответствует столбцу таблицы return_policy.Но на самом деле имя столбца равно returnPolicy

Hibernate следует стратегии именования относительно того, какое имя столбца следует извлекать из имен полей сущностей.Вы должны явно указать, использовать ли ImplicitNamingStrategy или PhysicalNamingStrategy.Hibernate предоставляет готовые классы для этого.

В качестве альтернативы, для этой конкретной проблемы, аннотирование поля с явным именем столбца поможет понять.

См. этот ТАК ответ для более.

0 голосов
/ 27 марта 2019

Ваш returnPolicy не сопоставлен со столбцом return_policy, вы можете быстро исправить это с помощью следующего

Method1

public class Product {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;
    private String name;
    private int price;
    private String vendor;
    private String description;
    @Column(name = "return_policy")
    private Boolean returnPolicy;

Method2

@JsonNaming аннотацияуправлять стратегией именования относительно того, какое имя столбца должно быть получено из имен полей сущностей.

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
import com.fasterxml.jackson.databind.annotation.JsonNaming;

@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class)
@JsonIgnoreProperties(ignoreUnknown = true)
public class Product {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;
    private String name;
    private int price;
    private String vendor;
    private String description;
    private Boolean returnPolicy;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...