直奔主题: 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
注意:联合主键表在做持久化时 必须要定义这个联合主键类 。如:
持久化实