当前位置: 首页 > 知识库问答 >
问题:

如何修复"java.sql.SQLSynTaxErrorException:未知列'product0_.return_policy'在'字段列表'"异常?

尉迟远
2023-03-14

当我尝试在浏览器上运行URL以获取所有产品时,我得到了这个“SQLSyntaxErrorException:未知列‘product0\uReturn\u policy’in‘field list’”。

你看这里

浏览器还显示以下内容:

出现意外错误(类型=内部服务器错误,状态=500)。无法提取结果集;SQL[无];嵌套异常为org。冬眠例外SQLGrammarException:无法提取结果集

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

这是getAllProducts方法,它是RESTController的一部分:

@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;
@Repository public interface ProductRepository extends JpaRepository<Product, String>{ }

SQL tinyint(布尔)与Java的布尔类型之间的映射是否存在问题?

共有3个答案

长孙明知
2023-03-14

如果不将属性用作数据库中的列,则可以使用此注释@Transient

JPA或Hibernate中的@瞬态注释用于指示字段不被持久化或忽略要保存在数据库中的字段。@瞬态存在于javax中。持久性包。它用于注释实体类、映射超类或可嵌入类的属性或字段。

你可以这样使用它。

@Transient
    private String token;
纪实
2023-03-14

您的returnPolicy未映射到列return\u policy,您可以通过以下方法快速解决此问题

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;

@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;
胡志
2023-03-14

Hibernate假设实体字段“returnPolicy”(返回策略)对应于表列“return\u policy”(返回策略)。但实际上,列名是returnPolicy

Hibernate遵循一种命名策略,即从实体字段名派生出什么列名。您应该明确指定是使用隐式命名策略(ImplicitNamingStrategy)还是物理命名策略(PhysicalNamingStrategy)。Hibernate为此提供现成的类。

或者,对于此特定问题,使用显式列名注释字段将使您能够理解。

更多信息请参见此答案。

 类似资料:
  • 我试图通过在IntelliJ IDEA中使用spring boot和MySQL创建一个restful API。但我得到了以下错误。并且我尝试为student.java模型使用注释。但它没有成功。我在我的MySQL表中使用了camel大小写的列名。但是错误显示为。 java文件。 我的应用程序。属性如下所示。 我创建了一个数据库,名为,并创建了一个表,名为Student,如下所示。 那么这个错误的原

  • 我在学春靴。我想引用MySQL数据并在Thymeleaf中显示MySQL数据。但是,我得到以下错误: java.sql.sqlsyntaxerroreXception:“字段列表”中的未知列“employee0_.Department_Department_ID”。 另外,我想设置为从Employee类引用Department类。(@manytoone)但是我不确定当前的实体类和MySQL设置是否

  • 你们能看到我的代码有什么问题吗,我正在尝试将经理数据持久化到数据库中,但是,它说:“字段列表”中的未知列“EMAIL”。 错误: 引起原因:javax . Persistence . Persistence Exception:Exception[Eclipse link-4002](Eclipse Persistence Services-2 . 7 . 0 . v 2017 08 11-d 6

  • 所以首先我为我不可靠的解释道歉。我的PHP技能需要认真改进。 错误消息表示“”未知。我知道这不是真的,因为当我创建一个名为“”的变量并回显前者时,我会得到编号。 以下是完整的错误消息: 致命错误:未捕获异常“PDOException”,消息为“SQLSTATE[42S22]:未找到列:C:\xampp\htdocs\loginregister master\addnew中的“字段列表”中的1054

  • 我需要帮助。 使用方法时,在HQL中出现错误: 我猜他必须写而不是 可能是我做错了实体和关系吗? 2个实体-房屋和街道 ER模型: 餐桌街道 ID 名称 houses_id 桌房 ID 名称 我的类: 街道 房屋 我的道小鬼: StreetDaoImp: HouseDaoImpl: 错误:

  • 即使我在表中设置了关系和定义了外键,我得到这个错误的原因是什么?