0

可能重复:
在 Hibernate 中调用存储过程

我有以下问题:我无法在 java 中调用存储过程

我所做的是:

创建一个实现可序列化 semaforoBO 调用的类并添加以下内容

@Entity
@NamedNativeQuery(
name="CalculoSemaforo",
query = "exec CalculoSemaforo codigo,fecha",
callable=true,
resultClass=char.class
)
public class SemaforoBO implements Serializable{
//code
}

存储过程的名称是 CalculoSemaforo,并且有两个输入变量返回一个字符。然后在 SemaforoBO 中有一个执行以下操作的函数:

public char semaforo(){
        DBTenant dbTenant = new DBTenant();
        Session sess;
        try {
            sess = dbTenant.getTenantSession();
            Query query =sess.getNamedQuery("CalculoSemaforo");
            query.setString("codigo", this.codigoarticulo);
            query.setLong("fecha",this.fecha);
            sem = (Character) query.uniqueResult();
        }
        catch(NullPointerException e)
        {
            sem = 'x';
        }
        return sem;
}

但它给了我一个例外 org.hibernate.MappingException: Named query not known: CalculoSemaforo

知道这个解决方案如何谢谢

4

1 回答 1

1

我找到了使用没有映射的休眠调用存储过程的替代方法,或者您必须依赖一个类来调用

DBTenant dbTenant = new DBTenant();
        Session sess;
        try {
            sess = dbTenant.getTenantSession();
            Query qry = sess.createSQLQuery("{ call Iturria.dbo.CalculoSemaforo2(?,?) }");
            qry.setString(0, this.codigoarticulo);
            qry.setLong(1, this.fecha);
            sem = (Character) qry.uniqueResult();
        }
        catch(NullPointerException e)
        {
            sem = 'y';
            return sem;
        }

感谢您的回复

于 2012-09-28T16:05:54.400 回答