2012-05-06 13 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; 
} 

私のコードを出力します: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()); 
} 

タイトル1は0ダウンロードを持っていました

今それは0を持っています

明らかに間違っています!

どこが間違っていますか?

答えて

1

単独で用いて、すなわち

++i; 
// or 
i++; 

プリ/ポストインクリメント演算子は、機能的に等価です。しかし、あなたのケースでは、それらをメソッドパラメータとして使用しており、その違いが明らかになります。

ここに問題を説明するコードがあります。 (すなわちI ++)この方法をポストインクリメントを使用しているときは、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がインクリメントされ、その値がメソッドに渡されます。後者は明らかにあなたが望むものです。

これは、ショートカットを慎重に扱う必要のある領域の1つです。

あなたは、あなたがこの問題に遭遇していないだろう

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

を行っていた場合。

関連する問題