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

相等的实体对象但具有不相等的属性 - 它们是否存在于单线程/单数据库应用程序中?

像上面这样的类似情况,什么时候 carA 是红色的而 carB 是蓝色的?

对于具有一个 DB 的单线程 Web 应用程序,是否存在需要carA 和 carB 具有相同身份但具有不相等属性的情况?

4

2 回答 2

3

相等的实体对象但具有不相等的属性 - 它们是否存在于单线程/单数据库应用程序中?

它们可能存在于具有本土 ORM 或数据访问层的应用程序中。这是有问题的,因为它使代码变得不那么直观和可预测。一般来说,如果您使用正确的工作单元实现(例如 Hibernate Session),这是一个已解决的问题并且不是问题。UOW 负责跟踪您在给定事务期间加载的所有内容,并确保将同一实体表示为单个 Java/C# 实例:

工作单元跟踪您在可能影响数据库的业务事务期间所做的一切。完成后,它会计算出根据您的工作更改数据库需要做的所有事情。

于 2012-08-24T21:52:34.930 回答
1

carA现在是什么颜色的?

它是蓝色的。

逐行

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 回答