我有一个 DAO 的集成测试,其中我使用了一个共享的 EntityManager(通过 Spring,使用 SharedEntityManagerCreator)。测试类被标记为@Transactional,被测试的DAO 方法也是如此。
在测试类和 DAO 中,我都在检索 User 实体,如下所示:
User user = em.find(User.class, "test");
在我的测试设置中,我修改了用户对象,但是当测试开始运行时,我没有在 DAO 中看到修改。原来,这两个引用并没有引用同一个对象;我在我的测试课上证明了这一点:
System.out.println("User objects equal = " + (user == dao.getUser()));
这打印出来是假的。我希望使用相同键对 EntityManager 的每次调用都会返回相同的对象引用,并且很惊讶(并且有点惊慌!)发现情况并非如此。任何人都可以对此有所了解吗?我已经重构了我的代码,所以这实际上不是问题(DAO 无论如何都不应该有 User 对象),但我仍然想更好地理解这一点。
谢谢!
Java 1.6u22、Toplink Essentials 2.0.1、Spring 2.5.6