2012-05-06 2 views
0

엔티티의 간단한 정수 값을 증가시키고 변경 사항을 db에 유지해야하는 ejb 부분에 메소드가 있습니다. 항상 동일한 값을 인쇄하므로 제대로 작동하지 않습니다! 여기 EJB 엔티티 편집

코드입니다 :

public void edit(T entity) { 
    getEntityManager().merge(entity); 
} 

public T refresh(T entity){ 
    T res = getEntityManager().merge(entity); 
    getEntityManager().refresh(res); 
    return res; 
} 

내 코드가 인쇄됩니다 :

제목 1 0 다운로드했다 dispensaFacade 사용되는 방법이 자동 생성 AbstractFacade에서 하나

public void incrementDownloads(Dispensa dispensa) { 
    int dl = dispensa.getDownloads(); 
    System.out.println(dispensa.getTitolo() + " had " + dl + " downloads"); 
    dispensa.setDownloads(dl++); 
    dispensaFacade.edit(dispensa);   
    dispensa = dispensaFacade.refresh(dispensa); 
    System.out.println("now it has " + dispensa.getNumDownloads()); 
} 

지금은 0

이 분명히 잘못되었습니다!

어디서 실수입니까?

단독

답변

1

, 즉

++i; 
// or 
i++; 

전/후 증가 연산자는 기능적으로 동일하다. 그러나 귀하의 경우에는 매개 변수를 메소드 매개 변수로 사용하고 그 차이가 명확 해집니다.

다음은 문제를 설명하는 코드입니다. (즉, 내가 ++)이 방법으로 사후 증가를 사용할 때 i 값은 내가이 전에 방법 에 전달, 볼 수 있듯이이 코드를 실행

public static void main(String[] args) { 
    int i = 0; 
    printPassedValue(i++); 
    System.out.println("i = " + i); 
    printPassedValue(++i); 
    System.out.println("i = " + i); 
} 


private static void printPassedValue(int value) { 
    System.out.println("Passed value: " + value); 
} 

Passed value: 0 
i = 1 
Passed value: 2 
i = 2 

생산 증분. 그러나 사전 증가 (++ i)를 사용하면 i가 증가하고 값이 메소드에 전달됩니다. 후자는 분명히 당신이 원하는 것입니다.

이것은 바로 가기를 사용할 때주의해야하는 영역 중 하나입니다. 당신이이 문제가 발생하지 않았을 다음

dl++; // or ++dl; 
dispensa.setDownloads(dl); 

을했던 경우

.

관련 문제