在hibernate spring-data jpa中显示错误

时间:2014-09-18 15:14:54

标签: java spring hibernate spring-mvc jpa

我正在使用spring数据jpa和hibernate在spring mvc项目中工作,我使用的是我在扩展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);

当我尝试在html页面中的控制器类中打印一个值时出现以下错误${value}

我在控制台中收到此错误:

  

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

当我尝试打开页面时出现此错误

  

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

在控制台中说:

  

列名无效

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

我已经看到类似的问题以及发布的内容我需要选择select中的所有列以便工作,但为什么我只需要在我的select中选择几列,即使我需要选择所有列不需要它们吗?

1 个答案:

答案 0 :(得分:0)

如果您使用的是Spring Data JPA&gt; 1.4,则可以创建一个DTO-Class,其中包含您需要的表格所需的属性。

示例-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;
    }
...
}