如何修复“java.sql.SQLSyntaxErrorException:‘字段列表’中的未知列‘product0_.return_policy’”异常?

svm*_*s54 5 java mysql database spring-boot

当我尝试在浏览器上运行 URL 以获取所有产品时,我一直收到此“SQLSyntaxErrorException:Unknown column 'product0_.return_policy' in 'field list'” 。

看这里

浏览器也显示如下:

出现意外错误(类型=内部服务器错误,状态=500)。无法提取结果集;SQL [不适用];嵌套异常是 org.hibernate.exception.SQLGrammarException: 无法提取 ResultSet

returnPolicy是导致此问题的唯一变量。当我从数据库和 Java 中的 Product 类中删除变量本身时,我能够成功地从数据库中检索所有值。

这是作为RESTController一部分的getAllProducts方法:

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

当我完全删除 returnPolicy 变量时,它工作正常。

是 MySQL 表描述:

存储在 returnPolicy 列中的值:

退货政策

  0 
  0 
  1 
  1 
  1 
Run Code Online (Sandbox Code Playgroud)

这是“产品”模型变量的代码:

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;
Run Code Online (Sandbox Code Playgroud)

产品库

@Repository public interface ProductRepository extends JpaRepository<Product, String>{ }
Run Code Online (Sandbox Code Playgroud)

SQL tinyint(Boolean)和Java的Boolean类型的映射有问题吗?

Nik*_*ahu 6

Hibernate 假设实体字段returnPolicy对应于表列return_policy。但实际上,列名是returnPolicy

Hibernate 遵循一种命名策略,即它应该从实体字段名称派生什么列名称。您应该明确指定是否使用ImplicitNamingStrategyPhysicalNamingStrategy。Hibernate 为此提供了开箱即用的类。

或者,对于这个特定问题,使用显式列名注释字段将使理解。

有关更多信息,请参阅SO 答案。