2013-01-08 155 views
2

我創建存儲過程的一個學生類這樣一個MySQL,我想調用此存儲過程在Hibernate中休眠SQLGrammer異常

存儲過程:

DELIMITER $$ 

DROP PROCEDURE IF EXISTS `StudentProcedure`$$ 

CREATE PROCEDURE `StudentProcedure`(IN studentNo varchar(12)) 
BEGIN 
SELECT SNAME FROM Student WHERE SNO=studentNo; 
END$$ 

DELIMITER ; 

我的POJO類:

package edu.model; 

public class Student { 
    private String studentNo; 
    private String studentName; 
    public String getStudentNo() { 
     return studentNo; 
    } 
    public void setStudentNo(String studentNo) { 
     this.studentNo = studentNo; 
    } 
    public String getStudentName() { 
     return studentName; 
    } 
    public void setStudentName(String studentName) { 
     this.studentName = studentName; 
    } 
} 

HBM文件:

<?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="edu.model.Student" table="Student"> 
     <id name="studentNo" column="SNO"> 
     <generator class="assigned"/>   
     </id> 
     <property name="studentName"> 
      <column name="SNAME" /> 
     </property> 
    </class> 
    <sql-query name="StudentProcedure" callable="true"> 
    <return alias="student" class="edu.model.Student"> 
    <return-property name="studentName" column="SNAME"> 
    </return-property> 
    </return> 
    <![CDATA[CALL StudentProcedure(:studentNo)]]> 
    </sql-query> 
</hibernate-mapping> 

識別TestClass:

package edu.test; 

    import org.hibernate.HibernateException; 
    import org.hibernate.Query; 
    import org.hibernate.Session; 
    import org.hibernate.Transaction; 
    import edu.model.Student; 
    import edu.util.SessionUtil; 

    public class ProcedureTest { 
     public static void main(String args[]) { 
      Session session = SessionUtil.getSession(); 
      Transaction tx = session.beginTransaction(); 
      try { 
       Query query = session.getNamedQuery("StudentProcedure"); 
       System.out.println("Test"); 
       query.setParameter("studentNo","123"); 
       Student student = (Student)query.uniqueResult();    
       System.out.println("Student Name:" + student.getStudentName()); 
      } catch (HibernateException e) { 
       System.err.println("Hibernate Exception>>>"+e.getClass().getName()+"..........+"+e.getMessage()); 
       tx.rollback(); 
      } 
     } 
    } 

當我跑我對着下面的異常我的類:

SEVERE: Column 'SNO0_0_' not found. 
Hibernate Exception>>>org.hibernate.exception.SQLGrammarException..........+could not execute query 

可以在任何一個可以幫助我 感謝

回答