2015-12-10 99 views
1

我有一個接口公共接口IAllAccountsRepo擴展CrudRepository春天JPA查詢findByNameAndType返回NULL

,並像下面

@Query(value = "SELECT * FROM account a where a.id in :id AND a.accountType = :accountType", nativeQuery=true) 
    public AccountEntity findByIdAndAccountType(@Param("id") String id, @Param("accountType") String accountType); 

當我把這種方法在一個輔助類的一個方法,在那裏我會得到一個ID和I列表循環遍歷它們並將過濾器值傳遞給上述方法,但當沒有與數據庫中的查詢匹配的記錄時,我遇到了問題。

它只是停止說空(當在db中沒有記錄)。我不想通過例外,如果我能做到這一點,需要忽略並繼續。無論如何,我可以編碼它忽略null並繼續?或者我需要標準查詢還是其他?

for (String id : accountIdList) { accountEntityTemp = iAllAccountsRepo.findByIdAndAccounttype(id, accounttype); System.out.println("bs" + accountEntityTemp.getId()); if (accountEntityTemp != null) { accountsEntityList.add(accountEntityTemp); } } accountEntityTemp = null爲一個id和accounttype,我得到下面的錯誤。

2015年12月10日14:20:03.784 WARN 10524 --- [NIO-8080-EXEC-1] .m.m.a.ExceptionHandlerExceptionResolver:處理程序執行導致異常:空

感謝。

回答

3

呃... ...都請首先..

@Query(value = "SELECT * FROM account a where a.id =:id AND a.accountType = :accountType", nativeQuery=true) 
public AccountEntity findByIdAndAccountType(@Param("id") String id, @Param("accountType") String accountType); 

話雖這麼說... 只是..爲什麼?你延長crudrepository,所以你可以和只寫

AccountEntity findByIdAndAccountType(String id, String accountType) 

如果AccountEntity豆你的屬性被命名爲 標識 ACCOUNTTYPE 或更改ID爲整數,因爲我不知道它的類型..

加人,一些保健潛在NPE的.. 你告訴我們,這是可能沒有accountentity發現...但你做

accountEntityTemp = iAllAccountsRepo.findByIdAndAccounttype(id, accounttype); 
     System.out.println("bs" + accountEntityTemp.getId()); /// Null pointer here potentially... 
     if (accountEntityTemp != null) { 
      accountsEntityList.add(accountEntityTemp); 
     } 

它最大變化

accountEntityTemp = iAllAccountsRepo.findByIdAndAccounttype(id, accounttype); 
     if (accountEntityTemp != null) { 
       System.out.println("bs" + accountEntityTemp.getId()); 
      accountsEntityList.add(accountEntityTemp); 
     } 
+0

經過春季文檔後,我改變了一切,但問題是印刷聲明是愚蠢的。非常感謝。 – Arun

0

我甚至不知道爲什麼在傳遞一個id的單個參數時使用IN函數。 不過,你想應該是這樣的方法:

AccountEntity findByIdAndAccountType(Integer id, String accountType);