java - hibernate SQLGrammer 异常

标签 java mysql spring hibernate

我已经为这样的学生类创建了一个 MySQL 存储过程,我想在 Hibernate 中调用这个存储过程

存储过程:

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>

测试类:

 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();
            }
        }
    }

当我运行我的类(class)时,我面临以下异常:

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

谁能帮帮我 谢谢

最佳答案

http://blog.unidev.com/index.php/2009/03/03/calling-oracle-stored-procedure-from-hibernate/

您还需要为 SNO 定义返回属性

<return-property name="studentNo" column="SNO">
</return-property>

关于java - hibernate SQLGrammer 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14209590/

相关文章:

java - 使用 LinkedHashMap 进行迭代和分配

css - 无法在 Spring MVC 应用程序中从 CSS 访问图像文件

java - 使用 vaadin 从数据库获取数据并显示在屏幕上

java - 在 Eclipse 中运行 Android 设备的两个实例

java - 桌面应用程序中的数据一致

Mysql无偏移分页

java - 调用 Intent 时应用程序关闭

MYSQL 日期之间的月份第 n 天的日期列表

mysql - Rails - 更改备用新数据列的默认值

java - 使用JAVA Spring同步rest服务