Hibernate本机查询:无效的列名错误SQL-17006
package com.abc.def.model; import javax.persistence.Column; import javax.persistence.Id; import javax.persistence.Entity; import javax.persistence.Embeddable; import javax.persistence.IdClass; import java.util.Date; import java.io.Serializable; @NamedNativeQuery(name="getMetadata",query=" select a.name alias1,a.fullname alias2, b.name alias3,b.age alias4, c.height alias5,c.something alias6, d.otherthing alias7 from lame_table_name a, lame_table_name_2 b where a.id = b.id and b.id = c.id and c.id = d.id and d.id = :namedparameter order by a.index,b.index ", resultClass=MetadataModel.class) @Entity @IdClass(SomeIdClass.class) public class MetadataModel{ @Id @Column("alias1") private Type alias1property; @Id @Column("alias2") private Type2 alias2property; @Column("alias3") private Type3 alias3property; //getters and setters } @Embeddable class SomeIdClass implements Serializable{ //serialVersionUID line @Id @Column("alias1") private Type alias1property; @Id @Column("alias2") private Type2 alias2property; //getter and setters }
错误是SQL-17006,无效列名,一整天都在试用这个设置的变体我应该尝试放置Column(“lame_table_name.name”)
我也尝试使用SqlResultSetMapping(并从POJO的字段中删除@Column)(并在SqlResultSetMapping的columns属性中指定所有列别名)(我们应该在通过SQLQuery接口的setResultSetMapping方法执行查询时再次指定resultsetmapping) ?)
package com.abc.def.model; import javax.persistence.Column; import javax.persistence.Id; import javax.persistence.Entity; import javax.persistence.Embeddable; import javax.persistence.IdClass; import java.util.Date; import java.io.Serializable; //other imports for the SqlResultSetMapping @NamedNativeQuery(name="getMetadata",query=" select a.name alias1,a.fullname alias2, b.name alias3,b.age alias4, c.height alias5,c.something alias6, d.otherthing alias7 from lame_table_name a, lame_table_name_2 b where a.id = b.id and b.id = c.id and c.id = d.id and d.id = :namedparameter order by a.index,b.index ", resultSetMapping="metaDataMapping") @SqlResultSetMapping(name="metaDataMapping", entities=@EntityResult(entityClass=MetadataModel.class, fields = {@FieldResult(name="alias1Property",column="alias1") //so on } ) ) @Entity @IdClass(SomeIdClass.class) public class MetadataModel{ private Type alias1property; private Type2 alias2property; private Type3 alias3property; //getters and setters } //composite class, exactly as above
我们应该在oracle的Select列表中包含所有表列。如果我们只保留几列。 例如,您的表Employee具有FirstName,LastName,EmpId列,如果您有查询类似。
session.createSQLQuery("Select FirstName from Employee");
以上查询将无法正常工作。 它将抛出无效列错误exception。 因此,最好将所有列放在Oracle的Select子句中。
礼貌: 一个答案谢谢,Rajesh。
请尝试@Column(name = "myprop")
。 另请注意,Type / Type2 / Type3必须是Simple类型(通常为Integer / Long / String / Date)。
好吧,早些时候我试图在resultsetmapping中指定列和实体属性,所以我尝试删除实体映射,保留columns属性,并调用aliastobean结果转换器,再加上写入setter来接受BigDecimal而不是Long(因为它是一个Oracle DB),解决了这个问题……
- 使用Hibernate映射整数列表
- Hibernate Mapping – 使用关联表连接两个表 – 但是有一个扭曲
- 如何在不更改注释的情况下禁用Hibernate中某些特定实体的二级缓存
- Spring 4 + Hibernate 5 = org.springframework.orm.jpa.EntityManagerHolder无法强制转换为org.springframework.orm.hibernate5.SessionHolder
- Spring数据和mongodb – 在@Transactional中简单回滚弹簧
- Hibernate可以返回除List之外的结果对象的集合吗?
- @Transactional如何影响Hibernate中的当前会话?
- 如何在dropwizard上使用guice自动连接HibernateBundle?
- JDBC批处理操作的理解