[英]Hibernate issue - Invalid column name
I have added two columns in the sql to get the values through hibernate.My databse is oracle and those fields datatype i number. 我在sql中添加了两列来通过hibernate获取值。我的数据库是oracle,那些字段数据类型为i。 So i have created the beans with long and (tried Integer too) but when retrieving the values(executing the valuesquery).
所以我用long创建了bean(也试过了Integer)但是在检索值时(执行valuesquery)。
Its giving me an error 它给了我一个错误
org.hibernate.type.LongType - could not read column value from result set
java.sql.SQLException: Invalid column name
at oracle.jdbc.driver.OracleStatement.getColumnIndex(OracleStatement.java:3711)
at oracle.jdbc.driver.OracleResultSetImpl.findColumn(OracleResultSetImpl.java:2806)
at oracle.jdbc.driver.OracleResultSet.getLong(OracleResultSet.java:444)
at weblogic.jdbc.wrapper.ResultSet_oracle_jdbc_driver_OracleResultSetImpl.getLong(Unknown Source)
at org.hibernate.type.LongType.get(LongType.java:28)
at org.hibernate.type.NullableType.nullSafeGet(NullableType.java:163)
at org.hibernate.type.NullableType.nullSafeGet(NullableType.java:189)
tABLE DEFINITION : 电话定义:
CREATE TABLE "PRODUCTLIST"
(
PRICELIST_PUBLISH_KEY decimal(22) NOT NULL,
PRODUCT_NBR varchar2(54) NOT NULL,
PRODUCT_KEY decimal(22),
PRODUCT_DESCRIPTION varchar2(360),
PRODUCT_FAMILY_NBR varchar2(30),
PRODUCT_FAMILY_DESCR varchar2(180),
PRODUCT_GROUP_NBR varchar2(30),
PRODUCT_GROUP_DESCR varchar2(180),
PRODUCT_LINE_NBR varchar2(30),
PRODUCT_LINE_DESCR varchar2(180),
PRODUCT_CLASS_CODE varchar2(6),
LAST_PP_GENERATED_DATE_KEY decimal(22),
LAST_PP_GENERATED_DATE date,
PUBLISH_PERIOD_KEY decimal(22) NOT NULL,
PUBLISH_PERIOD_DATE date,
PL_KEY decimal(22),
PRODUCTLIST varchar2(750),
SALES_KEY decimal(22),
PRODUCT varchar2(60),
DM_EXTRACTED_BY_USER varchar2(90)
)
sql : sql:
Query query = session.createSQLQuery(channelQuery)
.addScalar("PRODUCT",Hibernate.STRING)
.addScalar("PRODUCTLIST",Hibernate.STRING)
.addScalar("PRODUCTKEY",Hibernate.LONG)
.addScalar("SALESKEY",Hibernate.LONG)
.setResultTransformer(Transformers.aliasToBean(SearchResult.class));
return query.list();
}
});
Please help me to fix the issue ? 请帮我解决这个问题?
In your table definition, I can't see all the fields you're using in the addScalar()
methods: there are no PRODUCTKEY
nor SALESKEY
fields. 在表定义中,我无法在
addScalar()
方法中看到您正在使用的所有字段:没有PRODUCTKEY
或SALESKEY
字段。 Instead I can see a PRODUCT_KEY
and a SALES_KEY
fields (underscores). 相反,我可以看到
PRODUCT_KEY
和SALES_KEY
字段(下划线)。 I think you should use the correct name of the fields in the addScalar()
methods. 我认为你应该使用
addScalar()
方法中字段的正确名称。
But if your query is the one you put in your comments, you have to correct some details: 但是,如果您的查询是您在评论中添加的查询,则必须更正一些细节:
p
instead of pub
as alias for the table name . p
而不是 pub
作为表名的别名 。 As there is only one table in the query, you can suppress the alias. SELECT
clause, p.productprice
is not an existing field in your table . SELECT
子句中, p.productprice
不是表中的现有字段 。 Maybe you want to use p.pricelist
instead. p.pricelist
代替。 WHERE
clause, p.productnbr
is not an existing field in your table . WHERE
子句中, p.productnbr
不是表中的现有字段 。 You should use p.product_nbr
instead. p.product_nbr
。 addScalar()
methods to match those you are using in the query. addScalar()
方法中的字段名称以匹配您在查询中使用的字段名称。 Modified query 修改查询
SELECT distinct p.product, p.productlist, p.PL_KEY, p.SALES_KEY
FROM productlist p
WHERE p.product_nbr in ('1002102')
Your code should be: 你的代码应该是:
Query query = session.createSQLQuery(channelQuery)
.addScalar("PRODUCT",Hibernate.STRING)
.addScalar("PRODUCTLIST",Hibernate.STRING)
.addScalar("PL_KEY",Hibernate.LONG)
.addScalar("SALES_KEY",Hibernate.LONG)
.setResultTransformer(Transformers.aliasToBean(SearchResult.class));
return query.list();
If you define aliases in your query, then you can use the alias names instead of the field names. 如果在查询中定义别名,则可以使用别名而不是字段名。 For example, with this query:
例如,使用此查询:
SELECT distinct p.product, p.productlist, p.PL_KEY as PRODUCTKEY, p.SALES_KEY as SALESKEY
FROM productlist p
WHERE p.product_nbr in ('1002102')
you can use the following code (it's your original code): 您可以使用以下代码(这是您的原始代码):
Query query = session.createSQLQuery(channelQuery)
.addScalar("PRODUCT",Hibernate.STRING)
.addScalar("PRODUCTLIST",Hibernate.STRING)
.addScalar("PRODUCTKEY",Hibernate.LONG)
.addScalar("SALESKEY",Hibernate.LONG)
.setResultTransformer(Transformers.aliasToBean(SearchResult.class));
return query.list();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.