今天写代码的时候,发现一个很奇怪的问题:
// 一个新的对象
Temp newTemp = new Temp();
// 从数据库中查找到ID 为id的对象
Temp oldtemp = tempDao.findoneById(id);
// 保存对象
tempDao.save(newTemp);
public interface TempDao extends JpaRepository<Temp, Long> {
@Query("from Temp where tempId = ?1")
Temp findoneById(Long id);
}
此时,会惊奇的发现,oldtemp 也变成了newTemp的值,下面就对该问题进行了分析。
猜测,会不会jpa查询的操作返回的是对象可能就是同一个,即在同一个内存地址。而save保存到数据库的同时返回的对象,也是同一个内存地址的对象。
验证:
Temp temp1 = tempDao.findoneById(1);
Temp temp2 = tempDao.findoneById(2);
Temp temp3 = tempDao.findoneById(3);
temp1.setTemplateName("232323");
运行temp1.setTemplateName之前,可以看到三个对象的地址是一致的
运行temp1.setTemplateName之后,可以看到三个对象的的name都改变了
所以咱们的猜测正确了!