使用 Spring 数据 JPA 的 Spring Boot:无法提取 ResultSet

Posted

技术标签:

【中文标题】使用 Spring 数据 JPA 的 Spring Boot:无法提取 ResultSet【英文标题】:Spring boot with Spring data JPA: could not extract ResultSet 【发布时间】:2016-07-27 14:52:55 【问题描述】:

我用 Spring Data JPA 开发了一个 Spring Boot 应用程序 请问有人有解决这个问题的方法吗?: 我的豆子:

@Entity
@Table(name = "employee", catalog = "explorerrh")
public class Employee implements java.io.Serializable 

/**
 * 
 */
private static final long serialVersionUID = 1L;


private Integer idemployee;
private String employeeName;
private String employeeLastName;
private String employeeCin;
private String employeePhone;
private String employeeAdress;
private String employeePost;
private String employeeCnss;
private String employeeCv;
private String employeePhoto;
private String employeeSalaire;

public Employee() 


public Employee(String employeeName, String employeeLastName,
        String employeeCin, String employeePhone, String employeeAdress,
        String employeePost, String employeeCnss, String employeeCv,
        String employeePhoto, String employeeSalaire) 
    this.employeeName = employeeName;
    this.employeeLastName = employeeLastName;
    this.employeeCin = employeeCin;
    this.employeePhone = employeePhone;
    this.employeeAdress = employeeAdress;
    this.employeePost = employeePost;
    this.employeeCnss = employeeCnss;
    this.employeeCv = employeeCv;
    this.employeePhoto = employeePhoto;
    this.employeeSalaire = employeeSalaire;


@Id
@GeneratedValue(strategy = IDENTITY)
@Column(name = "idemployee", unique = true, nullable = false)
public Integer getIdemployee() 
    return this.idemployee;


public void setIdemployee(Integer idemployee) 
    this.idemployee = idemployee;


@Column(name = "employeeName", length = 45)
public String getEmployeeName() 
    return this.employeeName;


public void setEmployeeName(String employeeName) 
    this.employeeName = employeeName;


@Column(name = "employeeLastName", length = 45)
public String getEmployeeLastName() 
    return this.employeeLastName;


public void setEmployeeLastName(String employeeLastName) 
    this.employeeLastName = employeeLastName;


@Column(name = "employeeCIN", length = 45)
public String getEmployeeCin() 
    return this.employeeCin;


public void setEmployeeCin(String employeeCin) 
    this.employeeCin = employeeCin;


@Column(name = "employeePhone", length = 45)
public String getEmployeePhone() 
    return this.employeePhone;


public void setEmployeePhone(String employeePhone) 
    this.employeePhone = employeePhone;


@Column(name = "employeeAdress", length = 45)
public String getEmployeeAdress() 
    return this.employeeAdress;


public void setEmployeeAdress(String employeeAdress) 
    this.employeeAdress = employeeAdress;


@Column(name = "employeePost", length = 45)
public String getEmployeePost() 
    return this.employeePost;


public void setEmployeePost(String employeePost) 
    this.employeePost = employeePost;


@Column(name = "employeeCNSS", length = 45)
public String getEmployeeCnss() 
    return this.employeeCnss;


public void setEmployeeCnss(String employeeCnss) 
    this.employeeCnss = employeeCnss;


@Column(name = "employeeCV", length = 45)
public String getEmployeeCv() 
    return this.employeeCv;


public void setEmployeeCv(String employeeCv) 
    this.employeeCv = employeeCv;


@Column(name = "employeePhoto", length = 45)
public String getEmployeePhoto() 
    return this.employeePhoto;


public void setEmployeePhoto(String employeePhoto) 
    this.employeePhoto = employeePhoto;


@Column(name = "employeeSalaire", length = 45)
public String getEmployeeSalaire() 
    return this.employeeSalaire;


public void setEmployeeSalaire(String employeeSalaire) 
    this.employeeSalaire = employeeSalaire;

我的服务是这样的:

interface EmployeeRepository extends Repository<Employee, Long> 

Page<Employee> findAll(Pageable pageable);

Employee findByEmployeeNameAndEmployeeCin(String employeeName, String cin);

然后我在com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'employee0_.employee_adress' in 'field list' 收到此错误

我的数据库已正确生成,它与 bean 生成的相同! 我真的不明白这是什么问题!所以请任何人都可以帮我解决这个问题吗? 谢谢各位,如果您需要任何其他信息,请询问我

【问题讨论】:

【参考方案1】:

正如另一个answer中指出的那样:

默认情况下 Spring 使用 org.springframework.boot.orm.jpa.SpringNamingStrategy 生成 表名。这是一个非常薄的扩展 org.hibernate.cfg.ImprovedNamingStrategy。其中的 tableName 方法 类被传递了一个源字符串值,但它不知道它是否来 来自@Column.name 属性,或者如果它是隐式生成的 来自字段名称。

改进的命名策略会将 CamelCase 转换为 SNAKE_CASE,其中 因为 EJB3NamingStrategy 只是使用未更改的表名。

如果您不想更改命名策略,您总是可以 以小写形式指定您的列名:

@Column(name="testname")

另外,您确定该列是“employeeadress”而不是“employeeaddress”吗?

【讨论】:

以上是关于使用 Spring 数据 JPA 的 Spring Boot:无法提取 ResultSet的主要内容,如果未能解决你的问题,请参考以下文章

使用 spring-data-jpa 和 spring-mvc 过滤数据库行

Spring Boot + Spring Batch + Spring JPA

使用 Spring 数据 JPA 获取随机记录

如何使用 Spring 和 JPA 设置多个数据源

Maven依赖版本冲突:使用Spring数据Neo4j和Spring数据JPA的应用

使用 spring-data-jpa 获取这些数据如何更正确?