显示休眠春季数据jpa中的错误



我在一个springmvc项目中使用springdatajpa和hibernate,我使用在扩展JpaRepository的接口中声明的本地查询,如下所示:

public interface I_Table_one extends JpaRepository<table_id, Long>{
    @Query(value ="select name_att, .... .... various att"
            + "from Table_one "
            + "where id_table = 4 ", 
           nativeQuery = true)
    public List<Table_one_Mapped_Class>serachInTable();

这个方法没有多大意义。只是一个例子,我有一个在select中有80个属性的方法。我只想知道有一种方法可以知道我错了什么列名。

我的映射类:

@Entity
@Table(name="Table_one")
public class Table_one_Mapped_Class implements Serializable {
    private static final long serialVersionUID = 1L;
////ID///////
                @Id
                @Column (name="ID_TABLE", nullable=false)
                private Long idInMyTable;
////ID///////
 .....other columns

这是我的hibernate属性配置:

jpaProperties.put("hibernate.dialect", "org.hibernate.dialect.Oracle10gDialect");
           jpaProperties.put("hibernate.format_sql", true);
           jpaProperties.put("hibernate.ejb.naming_strategy", "org.hibernate.cfg.ImprovedNamingStrategy");
           jpaProperties.put("hibernate.show_sql", true);

当我试图在像${value} 这样的html页面中打印控制器类的值时,我得到了以下错误

我在控制台中得到这个错误:

警告:org.hubinate.engine.jdbc.spi.SqlExceptionHelper-SQL错误:17006,SQL状态:99999
错误:org.hubinate.engine.jdbc.spi.SqlExceptionHelper-列名无效

当我试图打开页面时出现这个错误

请求处理失败;嵌套异常为org.springframework.org.jpa.JpaSystemException:org.hibernate.exception.GenericJDBCException:无法执行查询;嵌套异常为javax.persistence.PersistenceException:org.hibernate.exeption.GenericJDBCException:无法执行查询

控制台上写着:

无效列名

但是,我如何知道哪一列的名称无效,在我放入接口方法的查询中,或者在我映射的类中的属性名称无效

我也看到过类似的问题,有人发帖说我需要选择select中的所有列才能工作,但为什么我只需要select中的几个列?我需要选择所有列吗?即使不需要它们?

如果您使用的是Spring Data JPA>1.4,那么您可以创建一个DTO类,该类正好包含表中所需的属性。

一个示例DTO和-Query看起来是这样的,那么:

查询:

@Query("select new de.mypackage.mymodel.dto.myDTO(name_Att, att2,, att3)" +
        " from Table_One " +
        "where ...")
List<myDTO> getAttributesFromBigTable(String name_Attribute, 
                String attribute2, String attribute3);

DTO:

    public class myDTO {
    private String name_attr;
    private String attr2;
    private String attr3;
    public myDTO(String name_attr, String attr2, String attr3) {
        this.name_attr = name_attr;
        this.attr2 = attr2;
        this.attr3 = attr3;
    }
    public String getName_Attr() {
       return name_attr;
    }
...
}

最新更新