Spring MVC +jpa 删除联合主键表数据
来源:互联网 发布:c语言两个等于号 编辑:程序博客网 时间:2024/06/06 03:23
直奔主题: 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
注意:联合主键表在做持久化时 必须要定义这个联合主键类 。如:
持久化实体对象:
@Entity
@IdClass(RoleToMenuPK.class)
@Table(name = "m_roletomenu", schema="wlshop")
public class RoleToMenu implements Serializable {
private static final long serialVersionUID = 2475854169969988403L;
@Id
private Integer fk_role_id;
@Id
private Integer fk_menu_id;
public RoleToMenu(){}
public RoleToMenu(Integer fk_role_id,Integer fk_menu_id){
this.fk_role_id = fk_role_id;
this.fk_menu_id = fk_menu_id;
}
public Integer getFk_role_id() {
return fk_role_id;
}
public void setFk_role_id(Integer fk_role_id) {
this.fk_role_id = fk_role_id;
}
public Integer getFk_menu_id() {
return fk_menu_id;
}
public void setFk_menu_id(Integer fk_menu_id) {
this.fk_menu_id = fk_menu_id;
}
}
持久化实体对象对应的主键类:
public class RoleToMenuPK implements Serializable {
private static final long serialVersionUID = 2475854169969988403L;
private Integer fk_role_id;
private Integer fk_menu_id;
public RoleToMenuPK(){}
public RoleToMenuPK(Integer fk_role_id,Integer fk_menu_id){
this.fk_role_id = fk_role_id;
this.fk_menu_id = fk_menu_id;
}
public Integer getFk_role_id() {
return fk_role_id;
}
public void setFk_role_id(Integer fk_role_id) {
this.fk_role_id = fk_role_id;
}
public Integer getFk_menu_id() {
return fk_menu_id;
}
public void setFk_menu_id(Integer fk_menu_id) {
this.fk_menu_id = fk_menu_id;
}
@Override
public boolean equals(Object obj)
{
if (this == obj)
return true;
else
return false;
}
@Override
public int hashCode()
{
int result = 17;
result = 37 * result + fk_role_id.hashCode();
result = 37 * result + fk_menu_id;
return result;
}
}
注意这里的 equals 方法和 hashcode方法是必须要 重写的,不然再删除查询的时候回报错。
- Spring MVC +jpa 删除联合主键表数据
- spring jpa使用联合主键
- JPA--联合主键
- JPA:联合主键
- JPA联合主键
- JPA 的联合主键
- 删除表主键 建立联合主键
- spring jpa 联合主键更好用的办法
- JPA中的联合主键详解
- JPA联合主键的使用
- JPA之JPA中的联合主键
- 【数据库】联合主键 删除
- spring-data-jpa使用联合主键后出现operand should contain 1 column(s)
- JPA/hibernate @joincolumns 联合主键关联
- JPA开发总结<六>--联合主键
- JPA联合主键并做从表外键
- JPA联合主键的使用(@EmbeddedId+@Embeddable)
- JPA复合主键另一种实现--联合约束
- ASN.1编码学习笔记
- sqlserver 创建月表视图过程
- php小数点后取两位
- win32和64位oracle客户端共存的配置方式
- 玩的就是你,轻量级自定义View
- Spring MVC +jpa 删除联合主键表数据
- 知乎spark与hadoop讨论
- 屏幕适配1
- Eclipse 导入外部项目无法识别为web项目并且无法在部署到tomcat下
- a的n次幂 —— POJ 3100 Root of the Problem
- 基础四:ContentProvider
- thrift 库使用心得
- shareSDK 新浪取消授权
- 第四周-项目3 - 单链表应用(3)判断递增