2016-08-03 79 views
0

我有一個實體(StockKeepingUnit)與NamedNativeQuery:獲取Integer.class作爲結果NamedNativeQuery

@NamedNativeQuery(name = StockKeepingUnit.NQ_FINDBY_ARTICLE_AND_SIZE, resultClass = StockKeepingUnit.class, hints = { 
     @QueryHint(name = "org.hibernate.cacheable", value = "false"), 
     @QueryHint(name = "org.hibernate.fetchSize", value = "1"), 
     @QueryHint(name = "org.hibernate.readOnly", value = "true") }, query = "SELECT * " 
      + "FROM StockKeepingUnit sku " + "WHERE sku.article = :articleNumber " 
      + "AND sku.size = :size " + "AND sku.deleted = 0") 

調用Java中:

Query query = em.createNamedQuery(StockKeepingUnit.NQ_FINDBY_ARTICLE_AND_SIZE); 
query.setParameter(StockKeepingUnit.NQ_PARAM_ARTICLE_NR, articleNumber); 
query.setParameter(StockKeepingUnit.NQ_PARAM_SIZE, size); 

return (StockKeepingUnit) query.getSingleResult(); 

與此查詢我只想選擇sku.stockKeepingUnitNumber並在執行此查詢時得到一個Integer-Value作爲結果。

我想這樣的事情,但這並沒有工作...

@NamedNativeQuery(name = StockKeepingUnit.NQ_FINDBY_ARTICLE_AND_SIZE, resultClass = Integer.class, hints = { 
     @QueryHint(name = "org.hibernate.cacheable", value = "false"), 
     @QueryHint(name = "org.hibernate.fetchSize", value = "1"), 
     @QueryHint(name = "org.hibernate.readOnly", value = "true") }, query = "SELECT sku.stockKeepingUnitNumber " 
      + "FROM StockKeepingUnit sku " + "WHERE sku.article = :articleNumber " 
      + "AND sku.size = :size " + "AND sku.deleted = 0") 

調用Java中:

Query query = em.createNamedQuery(StockKeepingUnit.NQ_FINDBY_ARTICLE_AND_SIZE); 
query.setParameter(StockKeepingUnit.NQ_PARAM_ARTICLE_NR, articleNumber); 
query.setParameter(StockKeepingUnit.NQ_PARAM_SIZE, size); 

return (Integer) query.getSingleResult(); 

任何人可以幫助我嗎?

+1

爲什麼不工作?你有沒有得到一些例外? –

回答

0

我解決了這個問題機智ResultSetMapping :-)

@SqlResultSetMapping(name = StockKeepingUnit.NQ_FIND_ONLY_SKU, columns = { 
    @ColumnResult(name = StockKeepingUnit.NQ_RESULT_SKU_NAME)} 

在NamedQuery你可以參考這個映射與屬性

@NamedNativeQuery(name = StockKeepingUnit.NQ_FINDBY_ARTICLE_AND_SIZE, resultSetMapping = StockKeepingUnit.NQ_FIND_ONLY_SKU, query = "SELECT sku.stockKeepingUnitNumber as " 
      + StockKeepingUnit.NQ_RESULT_SKU_NAME 
      + " FROM StockKeepingUnit sku " + "WHERE sku.article = :articleNumber " 
      + "AND sku.size = :size")