Spring Data JPA实体的生命周期总结 (5)

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
  /**
* 持久化游离态的对象
*@param id
* @return
*/
@RequestMapping("/mergeDetached/{id}")
public String mergeDetached(@PathVariable("id")Long id){
try {
User user = userDao.findById(id);
userDao.mergeDetached(user);
}catch (Exception e){
logger.error("合并(merge)一个游离态的对象!",e);
return REPONSE_ERR;
}
return REPONSE_SUCCESS;
}
---------------------------------------------------------------
/**
* 合并游离态的对象
*
* @param user
*/
@Override
public void mergeDetached(User user) {
clear();
User newUser = merge(user);
newUser.setName("newUser merge detached success!");
user.setName("user merge detached success!");
}
 

步骤

:8080/user/list,获取`id`

:8080/user/mergeDetached/5,返回`SUCCESS!`

:8080/user/list,查看

结果:对应实体的name值变为newUser merge detached success!,证明返回新的对象为托管态对象

2.游离态

refresh

方法可以保证当前的实例与数据库中的实例的内容一致,注意:是反向同步,将数据库中的数据同步到实体中

不同状态下执行em.refresh()方法产生结果:

瞬时态:抛异常org.springframework.dao.InvalidDataAccessApiUsageException: Entity not managed;

托管态: 将数据库中的数据同步到实体中,返回一个托管态的对象。

删除态:抛异常org.springframework.dao.InvalidDataAccessApiUsageException: Entity not managed;

游离态:抛异常org.springframework.dao.InvalidDataAccessApiUsageException: Entity not managed;

总结:只有被托管的对象才可以被refresh。

1.瞬时态

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
  /**
* 刷新new出来的对象
*@param id
* @return
*/
@RequestMapping("/refreshNew")
public String refreshNew(){
try {
User user = new User().setName("lxt").setNumber("007");
userDao.refresh(user);
}catch (Exception e){
logger.error("刷新(refresh)一个new的对象!",e);
return REPONSE_ERR;
}
return REPONSE_SUCCESS;
}
 

步骤

:8080/user/refreshNew

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwdjzd.html