2010-03-11 2 views
0

종종 유용한 것을 반환하지 않는 메소드를 사용해야합니다. hibernate에서 saveOrUpdate()를 호출하면 성공적으로 수행되었는지 여부를 알 수 없습니다. 이 작업을 수행하려면 어떻게결과를 반환하는 모범 사례 최대 절전 모드에서 saveOrUpdate 후 플래그?

public int saveOrUpdateA(A a) { 
     int resultFlag = 0 ; 
    try { 
     // obtaining session is omitted 
     session.saveOrUpdate(a); 
     resultFlag = 1 ;  
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return resultFlag ; 
} 

: 나는이 같은 구현 (I 조금 어색 생각)를 사용? 좋은 생각이야?

예외는 DAO 계층이나 서비스 계층에서 발견해야합니까?

답변

1

예외가없는 것은 성공 지표입니다.

정말로 표시기가 필요하면 부울 반환을하겠습니다.

public boolean saveOrUpdateA(A a) { 
    boolean success = false; 
    try { 
    // obtaining session is omitted 
    session.saveOrUpdate(a); 
    success = true; 

    } catch (Exception e) { 
    // log it and swallow exception 
    // calling code has to be sure to check on success flag; 
    // otherwise it has no idea something went terribly wrong 
    } 
    return success ; 
} 

응용 프로그램이 여전히 session.saveOrUpdate에 의해 슬로우 발생할 가능성이있는 예외()를 처리하는 다른 전체적으로 많이하지 않은 리턴 상태를 확인하고 적절하게 처리해야합니다.

public void saveOrUpdateA(A a) throws Exception { 

    try { 
    // obtaining session is omitted 
    session.saveOrUpdate(a); 
    } catch (Exception e) { 
    // log it and rethrow; let calling code figure how to handle 
    throw e; 
    } 
} 
2

왜 여기 반환해야합니까? 실패한 경우에는 예외가 있습니다.

귀하의 전화 방법에 뭔가가 필요한 경우에는 다음과 같이하십시오.

public void saveOrUpdateA(A a) throws Exception{ 
    // obtaining session is omitted 
    session.saveOrUpdate(a); 
} 
+0

때때로이 메서드는 RPC를 통해 호출되기 때문에. 내가 자바에서 예외를 잡을 수 있지만 actionscript 또는 자바 스크립트에서 수 없습니다,이 방법은 프런트 엔드에 성공적으로 완료되었음을 나타내는 표시기가 필요합니다. – Sawyer

+0

무엇을하고 있는지 알고 있다면 버전이 좋습니다. 그걸로가. –

0

코드 문제는 사용자가 예외를 버블 링하지 않는다는 것입니다. 우리가 따르는 경향이있는 규칙은 다음과 같습니다. 예외가 있으면이를 버립니다. 예외가 없으면 성공적으로 완료됩니다.

0

저는이 방법을 전혀 포장하지 말아야한다고 생각합니다. 오류가 발생하면 예외가 있음을 명심하십시오.

관련 문제