2012-09-27 16 views
0

可能重複:
Calling a Stored Procedure in Hibernate我不能說在java中使用Hibernate和SQL服務器的存儲過程2008年

我有以下問題:我不能叫 存儲java中的程序

我做的是這樣的:

創建一個實現Serializable semaforoBO調用類,並添加以下

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

存儲過程的名稱是CalculoSemaforo,有兩個輸入變量返回一個char。 然後內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; 
} 

,但它給了我一個excepccion org.hibernate.MappingException:命名查詢不知道:CalculoSemaforo

任何想法如何解決這個感謝

+0

也有類似的話題。 http://stackoverflow.com/questions/10261651/named-query-not-known-for-named-hibernate-query 它可以給你一個答案。 – Alex

回答

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

感謝您的回覆