2013-09-24 2 views
1

다음 코드가 있습니다. 그것은 잘 작동합니다. 예외는 없습니다. 표준 쿼리로 검색된 JPA Entity 객체의 목록을 반복합니다 (따라서 목록에 null 개체가 없습니다). 목록에있는 루프에서 객체가 0contractManagerID이있는 경우 한 줄은 발사되도록신비 NullPointerException

for (PeriodicalTable periodical : resultsP){ 
     stringFor.add(periodical.getReference()); 
     site = em.find(SiteTable.class, periodical.getSiteID()); 
     if (site != null && site.getPostcode() != null && !site.getPostcode().equals("")){ 
      tempString = site.getPostcode().replaceAll("\\s+", " "); 
      periodical.setPostcode(tempString.trim());      
      }  
     } 

지금, 나는 if 문에 추가했습니다. 아래에 표시;

나는 if 문 자체에서 들어오는 예외를 격리 한 디버깅 후
for (PeriodicalTable periodical : resultsP){ 
     if(periodical.getContractManagerID()==0) //<---- HERE!!!! 
     { 
      stringFor.add(periodical.getReference()); 
     } 
     site = em.find(SiteTable.class, periodical.getSiteID());   
     if (site != null && site.getPostcode() != null && !site.getPostcode().equals("")){ 
      tempString = site.getPostcode().replaceAll("\\s+", " "); 
      periodical.setPostcode(tempString.trim());      
      }     
     } 

는 ("여기"로 표시),하지만 난 그게 할 수있는 방법을 이해하지 않습니다. null 개체가 목록에 없다는 것을 알고 있습니다. 그렇지 않으면 if 문 없이도 작동하지 않을 것이므로 개체가 없으면 제대로 작동하기 때문입니다. 나는 완전히 잃어 버렸다.

+0

'getContractManagerID()'에 의해 반환되는 것은 무엇입니까? –

+1

'periodical.getContractManagerID()'자체가 null이 아닌가요? – Bathsheba

+0

'getContractManagerID()'는 Integer를 반환합니다. 데이터베이스에는 null 값이 없지만 if 문이 포화 상태가 아니더라도 확실하게 수행 할 수 있습니까? –

답변

4

여기서 가능한 것은 periodical.getContractManagerID()null입니다.

null == 0을 비교하면 NullPointerException이됩니다.

대신이 작업을 수행 :

if (periodical.getContractManagerID() == null || 
    periodical.getContractManagerID() == 0) 
+0

시도해 보면 효과가 있습니다. 고맙습니다. 그것은 비록 질문을 제기한다. SQL 테이블에 모든 ContractManagerID에 대해 0 값이있는 경우 왜 모든 값이 0이 아닌 일부 null이 반환됩니까? –

+0

@Rudi Kershaw : 아마도 데이터베이스의 뷰가 null 값을 나타내는 방식입니다. – Bathsheba

+0

아마도, 아마도 ...하지만 그때 다른 null이 Netbeans에서 데이터베이스에 표시됩니다. 비트가 신비를 유지해야 할 것 같네요. –

1

은을 찾을 수있는 오히려 쉬운 방법이있다 :

  • 여기 줄에 중단 점을 설정합니다. Eclipse (Eclipse를 사용한다고 가정) 디버거가 팝업되면 periodical 변수를 선택하고 Ctrl + Shift + I ("Inspect"라고 함)을 누릅니다. null가 아닌 경우는 periodical.getContractManagerID()를 평가합니다. null이어야합니다.

즉, 해당 번호를 저장하기 위해 프리미티브를 사용하지 않습니다. 프리미티브를 사용하거나 적절한 기본값을 추가하거나 null을 확인해야합니다.

null이 될 수 있음을 의미하는 이 PeriodicalTable 클래스에있는 경우.