java - Spring Data JPA : @Query gives error java. sql.SQLException:找不到列 'id'

标签 java mysql spring jpa

我正在尝试运行以下查询

@org.springframework.stereotype.Repository
public interface ReportingParamRepository extends Repository<ReportingParamDAO, Integer> {

    @Query(nativeQuery = true, value = "SELECT student, AVG(height) FROM ReportingParams GROUP BY student")
    public List<ReportingParamDAO> getAverageGroupByStudent();
}

这就是 DAO

@Entity
@Table(name = "ReportingParams")
@NamedQuery(name = "ReportingParams.findAll", query = "SELECT r FROM ReportingParamDAO r")
public class ReportingParamDAO extends BaseDAO<Integer, ReportingParam> implements DAO<Integer> {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(unique = true, nullable = false)
    private Integer id;

    @ManyToOne
    @JoinColumn(name = "student", nullable = true)
    private StudentDAO studentBean;

    @Column
    private Long height;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public StudentDAO getStudentBean() {
        return studentBean;
    }

    public void setStudentBean(StudentDAO studentBean) {
        this.studentBean = studentBean;
    }

    public Long getHeight() {
        return height;
    }

    public void setHeight(Long height) {
        this.height = height;
    }
}

但是在执行存储库方法时出现以下错误

java.sql.SQLException: Column 'id' not found.
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:964) ~[mysql-connector-java-5.1.43.jar:5.1.43]
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:897) ~[mysql-connector-java-5.1.43.jar:5.1.43]
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:886) ~[mysql-connector-java-5.1.43.jar:5.1.43]
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:860) ~[mysql-connector-java-5.1.43.jar:5.1.43]
    at com.mysql.jdbc.ResultSetImpl.findColumn(ResultSetImpl.java:1077) ~[mysql-connector-java-5.1.43.jar:5.1.43]
    at com.mysql.jdbc.ResultSetImpl.getInt(ResultSetImpl.java:2567) ~[mysql-connector-java-5.1.43.jar:5.1.43]
    at org.apache.commons.dbcp2.DelegatingResultSet.getInt(DelegatingResultSet.java:283) ~[commons-dbcp2-2.1.1.jar:2.1.1]
    at org.apache.commons.dbcp2.DelegatingResultSet.getInt(DelegatingResultSet.java:283) ~[commons-dbcp2-2.1.1.jar:2.1.1]
    at org.hibernate.type.descriptor.sql.IntegerTypeDescriptor$2.doExtract(IntegerTypeDescriptor.java:62) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]
    at org.hibernate.type.descriptor.sql.BasicExtractor.extract(BasicExtractor.java:47) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]
    at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:238) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]
    at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:234) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]
    at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:224) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]
    at org.hibernate.type.AbstractStandardBasicType.hydrate(AbstractStandardBasicType.java:300) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]
    at org.hibernate.loader.Loader.extractKeysFromResultSet(Loader.java:789) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]
    at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:714) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]
    at org.hibernate.loader.Loader.processResultSet(Loader.java:972) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]
    at org.hibernate.loader.Loader.doQuery(Loader.java:930) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:336) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]
    at org.hibernate.loader.Loader.doList(Loader.java:2617) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]
    at org.hibernate.loader.Loader.doList(Loader.java:2600) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]
    at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2429) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]
    at org.hibernate.loader.Loader.list(Loader.java:2424) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]
...

如果我直接从 mysql 终端运行查询,它工作正常并且我得到正确的输出。有人可以帮忙吗?谢谢!!

最佳答案

这行不通。您的查询获取一个学生对象,您正试图将其映射到 ReportingParamDAO 的列表。

关于java - Spring Data JPA : @Query gives error java. sql.SQLException:找不到列 'id',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45754326/

相关文章:

java - Spring Security BCrypt 密码编码器 - 工作负载因素

java - 登录时如何使表单密码数据隐藏在Chrome开发者工具网络面板中。提交?

java - 使用一个 actionListener 监听多个 JRadioButton

php - 转换 SQL 的日期格式

mysql - 如何减少docker容器的内存消耗?

java - 如何在没有数据冗余的情况下与JPA实体建立递归关系?

java - Spring MVC 忽略给定 Controller 方法的 Json 属性

java - Quartz支持在多个节点上执行一次吗?

java - apache.commons.math3 - 如何使用线性规划?

MySQL:一对多连接表的列