2
carA = carRepository.load(1);
carB = carRepository.load(1);
carA == carB; // true
carA.changeColor(red);
carB.changeColor(blue);
carA == carB; // true

等しいエンティティオブジェクトですが、属性が等しくありません-それらはシングルスレッド/シングルdbアプリケーションに存在しますか?

上記のような同様のケースで、carAが赤になり、carBが青になるのはいつですか。

1つのDBを持つシングルスレッドのWebアプリの場合、carAとcarBが同じIDである必要があるが、属性が等しくない場合がありますか?

4

2 に答える 2

3

等しいエンティティオブジェクトですが、属性が等しくありません-それらはシングルスレッド/シングルdbアプリケーションに存在しますか?

それらは、自家製のORMまたはデータアクセス層を備えたアプリケーションに存在する可能性があります。これは、コードの直感性と予測可能性を低下させるため、問題があります。一般に、これは解決された問題であり、適切な作業単位の実装(Hibernateセッションなど)を使用する場合は問題になりません。UOWは、特定のトランザクション中にロードしたすべてのものを追跡する責任があり、同じエンティティが単一のJava / C#インスタンスとして表されることを確認します。

作業単位は、データベースに影響を与える可能性のあるビジネストランザクション中に行うすべてのことを追跡します。完了すると、作業の結果としてデータベースを変更するために実行する必要があるすべてのことがわかります。

于 2012-08-24T21:52:34.930 に答える
1

carAは今何色ですか?

青いです。

1行ずつ

carA = carRepository.load(1);  // carA is a reference to an object with id=1
carB = carRepository.load(1);  // carB is a reference to an object with id=1
carA == carB; // true          // carA == carB, they point to the same object 
carA.changeColor(red);         // object with id=1 has color `red`
carB.changeColor(blue);        // object with id=1 has color `blue`
carA == carB; // true          // carA == carB, they point to the same object 
于 2012-08-24T17:54:17.810 に答える