@Entity
class Employee{
@Id
String name;
int age;
String gender;
}
Я использую указанный выше объект сущности в качестве ключа в Hashmap:
Employee e1 = new Employee("abc",23,"M")
Теперь, если я создам новый объект с тем же идентификатором и сохраняю его:
@Autowired
EmployeeDao employeeDao;
e1.findByName("abc");
Map<Employee, Boolean> map = new HashMap<>();
map.put(e1, true);
Employee e2 = new Employee("abc",45,"F");
employeeDao.save(e2)
for(Employee ex:map.keySet()){
map.get(ex); //Returns null
}
Я понимаю, что мой HashKey (e1) также изменен (на e2). Теперь, поскольку Hashmap использует объекты «Entry», где Key будет объектом объекта «Сотрудник» (который был изменен), действительно ли объекты JPA ссылаются на объекты, хранящиеся в диспетчере объектов? Это почему ключ изменился?
Почему ключ (e1) изменился автоматически?
cashed
до тех пор, пока вы его не отсоедините. И загрузить объект поid
из кеша. Так что, вероятно, вы меняете связанный объект. Попробуйте отсоединить объект после сохранения - person Ihar Sadounikau   schedule 25.03.2019e1
иe2
и сохранитеe2
,e1
не изменится. Либо вы делаете что-то другое, либо ваш вывод о том, чтоe1
изменен, ошибочен. Пожалуйста, покажите нам исходный код, включая: создание обоих экземпляров, добавление экземпляра в HashMap, сохранение другого экземпляра и определение того, что экземпляр, используемый в HashMap, изменился. - person Jens Schauder   schedule 26.03.2019