У меня есть интеграционный тест 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