gpt4 book ai didi

java - JPA 实体是否存储对实体管理器的引用?

转载 作者:行者123 更新时间:2023-11-30 05:43:00 25 4
gpt4 key购买 nike

@Entity
class Employee{
@Id
String name;
int age;
String gender;
}

我使用上面的实体对象作为 Hashmap 中的键:

Employee e1 = new Employee("abc",23,"M")

现在,如果我创建一个具有相同 id 的新实体并保留它:

@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 是 Employee Entity 对象(已更改),JPA 实体是否引用实体管理器中存储的对象?这就是 key 改变的原因吗?

为什么Key(e1)会自动改变?

最佳答案

Spring Data JPA save 在后台进行合并。merge 在一级缓存中查找具有相同类和 id 的实体。如果它找到一个,它会将状态从参数复制到缓存中的实例。然后脏检查确保它被刷新到数据库。mergesave 也会返回在一级缓存中找到的实体。

由于您在同一事务中从数据库加载 e1 ,因此它位于第一级缓存中并被修改。

关于java - JPA 实体是否存储对实体管理器的引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55344571/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com