web-dev-qa-db-ja.com

「Java.sql.SQLSyntaxErrorException:不明な列「product0_.return_policy」の「フィールドリスト」」例外を修正する方法

ブラウザでURLを[〜#〜] get [〜#〜 ]すべての製品

こちらをご覧ください

ブラウザにも以下が表示されます:

予期しないエラーが発生しました(type = Internal Server Error、status = 500)。 ResultSetを抽出できませんでした。 SQL [n/a];ネストされた例外はorg.hibernate.exception.SQLGrammarExceptionです:ResultSetを抽出できませんでした

returnPolicyは、この問題を引き起こしている唯一の変数です。データベースとJavaのProductクラスの両方から変数自体を削除すると、データベースからすべての値を正常に取得できます。

これは、RESTController:の一部であるgetAllProductsメソッドです。

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

これは、returnPolicy変数を完全に削除するとうまく機能します。

これ はMySQLテーブルの説明です:

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のブール型の間のマッピングに問題はありますか?

5
svms54

あなたのreturnPolicyは列return_policyにマッピングされていません。次のようにしてこれをすばやく修正できます

方法1

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;

方法2

@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;
0
Devratna