直奔主题: jpa 做持久化时,想删除 一个有联合主键表中的 一条数据,看了jpa里面提供的 delete方法,
1.em.remove(entity); 一种是按照实体对象来删除的,但是这个实体对象 是有状态的,如果 你传递的实体对象参数是游离的那么删除是不被允许的会报如下错误:
Caused by: java.lang.IllegalArgumentException: Removing a detached instance xxx
所以想要用这种方式删除表数据的话必须要 先去数据库查出来这条数据然后根据查出来的实体对象 当参数再去删除才会成功。
2.em.remove(em.getReference(entityClass, entityId)); 我们来看下这个方法 他明显是通过主键ID 来删除表中数据的。可是我的是联合主键怎么破?问题来了。苦闷了很久,跟进去em.getReference(entityClass, entityId)方法 看了下参数注释 :
-
Parameters:
- entityClass entity class
- primaryKey primary key
注意:联合主键表在做持久化时 必须要定义这个联合主键类 。如:
持久化实

本文介绍了在Spring MVC + JPA中如何删除具有联合主键的表的数据。通过分析JPA提供的删除方法,强调了删除操作时实体对象必须是有状态的,否则会抛出IllegalArgumentException。同时,对于通过主键ID删除的方法,针对联合主键的情况,需要定义联合主键类,并重写equals和hashCode方法,以确保正确删除记录。
最低0.47元/天 解锁文章

2180

被折叠的 条评论
为什么被折叠?



