【问题标题】:I'm getting error "Invalid column name" [closed]我收到错误“列名无效”[关闭]
【发布时间】:2011-12-19 08:03:53
【问题描述】:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.vijay.Transfee" table="TRXN_FEE_TABLE">
<meta attribute="class-description">
This class contains the course details.
</meta>
<id name="Tcode" type="string" column="TRXN_FEE_CODE" >
    </id>
<property name="Icode" type="string" column ="INSTCODE" />
<property name="Pcode" type="string" column ="PRODUCT_CODE" />
<property name="Tcode1" type="string" column ="TRANSACTION_CODE" />
<property name="rebate_code1" type="string" column="REBATE_CODE"/>
</class>
<sql-query name="F_SP" callable="true">
    <return alias="fee"  class="com.vijay.Transfee">
        <return-property name="rebate_code1" column="REBATE_CODE"/>
    </return>
    { call Feeproc1(?) }
 </sql-query>
</hibernate-mapping>

package com.vijay;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;

import java.util.*;

public class A {

    public static void main(String[] args){

        Configuration config = new Configuration();
        SessionFactory factory = config.configure().buildSessionFactory();
        System.out.println(">>>>>>>>1");
        Session session = factory.openSession();
        Transaction tx = session.beginTransaction();
        Query query = (Query)session.getNamedQuery("F_SP"); 
        System.out.println(">>>>>>>>2");
        List result = query.list();
        System.out.println(query.list());
        Iterator it=result.iterator();
        while(it.hasNext())
        {
            Object[] sublist1 = (Object[])it.next();
            System.out.println(">>>>>>>>3");
            String Trx = (String)sublist1[0];
            System.out.println(">>>>>>>>4");
            System.out.println(Trx);
        }
        System.out.println(">>>>>>>>5");
        System.out.println(result);
}
}

我正在调用存储过程,只是打印我调用的那个,但它显示以下错误

线程“主”org.hibernate.exception.GenericJDBCException 中的异常:无法执行查询 在 org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:140) 在 org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:128) 在 org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66) 在 org.hibernate.loader.Loader.doList(Loader.java:2536) 在 org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2276) 在 org.hibernate.loader.Loader.list(Loader.java:2271) 在 org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:316) 在 org.hibernate.impl.SessionImpl.listCustomQuery(SessionImpl.java:1842) 在 org.hibernate.impl.AbstractSessionImpl.list(AbstractSessionImpl.java:165) 在 org.hibernate.impl.SQLQueryImpl.list(SQLQueryImpl.java:157) 在 com.vijay.A.main(A.java:24) 引起:java.sql.SQLException:无效的列名 在 oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:113) 在 oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:147) 在 oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:209) 在 oracle.jdbc.driver.OracleStatement.getColumnIndex(OracleStatement.java:3325) 在 oracle.jdbc.driver.OracleResultSetImpl.findColumn(OracleResultSetImpl.java:1926) 在 oracle.jdbc.driver.OracleResultSet.getString(OracleResultSet.java:1515) 在 org.hibernate.type.descriptor.sql.VarcharTypeDescriptor$2.doExtract(VarcharTypeDescriptor.java:61) 在 org.hibernate.type.descriptor.sql.BasicExtractor.extract(BasicExtractor.java:64) 在 org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:254) 在 org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:250) 在 org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:230) 在 org.hibernate.type.AbstractStandardBasicType.hydrate(AbstractStandardBasicType.java:331) 在 org.hibernate.loader.Loader.extractKeysFromResultSet(Loader.java:668) 在 org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:606) 在 org.hibernate.loader.Loader.doQuery(Loader.java:829) 在 org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:274) 在 org.hibernate.loader.Loader.doList(Loader.java:2533) ... 7 更多
CREATE OR REPLACE PROCEDURE LYCAMONEY.Feeproc1(p_cursor  OUT  sys_refcursor)
as rebate_code1 varchar2(20);
begin

  rebate_code1 := null;
  open p_cursor for
    select REBATE_CODE into rebate_code1  from TRXN_FEE_TABLE;

 dbms_output.put_line(rebate_code1 );

end;
/

谁能帮我解决这个问题……如果

【问题讨论】:

    标签: java oracle hibernate stored-procedures


    【解决方案1】:

    好吧,您的存储过程对于初学者来说是错误的。应该是:

    open p_cursor for
        select REBATE_CODE from TRXN_FEE_TABLE;
    

    这是错误的,因为 ref cursor 是一个指向查询的指针。它实际上并没有获取任何数据。

    但我认为这不是给您带来错误的原因。

    【讨论】:

    • 感谢您的回复:) 我摆脱了错误
    • 这是否意味着您的问题得到了回答?
    • 不,这实际上是一个愚蠢的错误......我后来发现了......我还有一个问题是除了命名查询之外还有其他方法可以调用过程...... ..如果会话对象是命名查询以外的唯一解决方案,则不需要休眠!!!!我们可以创建一个简单的java类.........
    • @vijayakumar - 作为新问题提出。 SO 是一个问答网站,而不是论坛,因此主题帖解决原始问题而不是其他问题很重要。
    猜你喜欢
    • 1970-01-01
    • 2012-05-17
    • 2014-07-22
    • 1970-01-01
    • 2019-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-15
    相关资源
    最近更新 更多