我正在使用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中选择几列,即使我需要选择所有列不需要它们吗?
答案 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;
}
...
}