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であり、charを返す2つの入力変数があります。次に、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を与えます:名前付きクエリは不明です:CalculoSemaforo

このソリューションがどのように感謝するか

4

1 に答える 1

1

マップなしでhibernateを使用してストアドプロシージャを呼び出す代わりの方法を見つけました。そうしないと、呼び出すクラスに依存する必要があります。

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 に答える