代码
12
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
/**
* 删除 删除态对象
*@param id
* @return
*/
@RequestMapping("/removeRemove/{id}")
public String removeRemove(@PathVariable("id")Long id){
try {
User user = userDao.findById(id);
userDao.removeRemove(user);
}catch (Exception e){
logger.error("删除(remove)一个删除态的对象!",e);
return REPONSE_ERR;
}
return REPONSE_SUCCESS;
}
-----------------------------------------------------
/**
* 删除 删除态的对象
*
* @param user
*/
@Override
public void removeRemove(User user) {
remove(user);
remove(user);
}
步骤
:8080/user/list,获取`id`
:8080/user/removeRemove/{id}
结果:返回SUCCESS!,后台输出一个查询sql和一个删除sql,证明第二个删除没有影响
12
Hibernate: select user0_.id as id1_0_, user0_.name as name2_0_, user0_.number as number3_0_ from t_user user0_ where user0_.id=?
Hibernate: delete from t_user where id=?
3.游离态
代码
12
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
/**
* 删除游离态对象
*@param id
* @return
*/
@RequestMapping("/removeDetached/{id}")
public String removeDetached(@PathVariable("id")Long id){
try {
User user = userDao.findById(id);
userDao.removeDetached(user);
}catch (Exception e){
logger.error("删除(remove)一个游离态的对象!",e);
return REPONSE_ERR;
}
return REPONSE_SUCCESS;
}
-------------------------------------------------------------
/**
* 删除游离态的对象
*
* @param user
*/
@Override
public void removeDetached(User user) {
clear();
remove(user);
}
步骤
:8080/user/list,获取`id`
:8080/user/persisDetached/{id}
结果:返回ERROR!抛异常
12
3
4
5
6
7
8
2019-01-26 00:14:11.071 ERROR 5228 --- [io-8080-exec-10] c.e.demo.controller.UserController : 删除(remove)一个游离态的对象!
org.springframework.dao.InvalidDataAccessApiUsageException: Removing a detached instance com.example.demo.entity.User#5; nested exception is java.lang.IllegalArgumentException: Removing a detached instance com.example.demo.entity.User#5
at org.springframework.orm.jpa.EntityManagerFactoryUtils.convertJpaAccessExceptionIfPossible(EntityManagerFactoryUtils.java:373) ~[spring-orm-5.1.4.RELEASE.jar:5.1.4.RELEASE]
at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:255) ~[spring-orm-5.1.4.RELEASE.jar:5.1.4.RELEASE]
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.translateExceptionIfPossible(AbstractEntityManagerFactoryBean.java:527) ~[spring-orm-5.1.4.RELEASE.jar:5.1.4.RELEASE]
at org.springframework.dao.support.ChainedPersistenceExceptionTranslator.translateExceptionIfPossible(ChainedPersistenceExceptionTranslator.java:61) ~[spring-tx-5.1.4.RELEASE.jar:5.1.4.RELEASE]
at org.springframework.dao.support.DataAccessUtils.translateIfNecessary(DataAccessUtils.java:242) ~[spring-tx-5.1.4.RELEASE.jar:5.1.4.RELEASE]
merge
不同状态下执行em.merge()方法产生结果:
瞬时态:提交到数据库,返回一个新的托管态的对象
托管态:根据原对象返回一个新的托管态的对象