java jpa使用了@ManyToMany注解,其中Role类中有一个属性@ApiModelProperty(hidden = true) @ManyToMany @JoinTable(name="system_role_permission", joinColumns= @JoinColumn(name="role_id", referencedColumnName="id"), inverseJoinColumns= @JoinColumn(name="permission_id", referencedColumnName="id") ) private List<Permission> permissions; Permission类中有一个属性 @ApiModelProperty(hidden = true) @ManyToMany(mappedBy = "permissions") @JsonIgnore private List<Role> roles; ,在修改的时候只想删除掉中间表,不想删除掉集合里面包含真正的实体类,如何做,请出示完整代码
时间: 2024-01-16 20:04:25 浏览: 90
如果你只想删除中间表而不删除集合中的实体类,可以使用JPA的@ManyToMany注解中的cascade属性来实现。将cascade属性设置为CascadeType.REMOVE,表示在删除一个Role实体时,只删除Role与Permission之间的关系,而不删除Permission实体本身。
修改Role类中的@ManyToMany注解,如下所示:
```
@ManyToMany(cascade = CascadeType.REMOVE)
@JoinTable(name="system_role_permission",
joinColumns=@JoinColumn(name="role_id", referencedColumnName="id"),
inverseJoinColumns=@JoinColumn(name="permission_id", referencedColumnName="id")
)
private List<Permission> permissions;
```
这样,在删除Role实体时,只会删除Role与Permission之间的关系,而不会删除Permission实体本身。同理,如果你想删除Permission实体时,只删除Permission与Role之间的关系而不删除Role实体本身,可以在Permission类中的@ManyToMany注解中设置cascade属性为CascadeType.REMOVE。
完整代码如下所示:
Role类:
```
@Entity
public class Role {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@ManyToMany(cascade = CascadeType.REMOVE)
@JoinTable(name="system_role_permission",
joinColumns=@JoinColumn(name="role_id", referencedColumnName="id"),
inverseJoinColumns=@JoinColumn(name="permission_id", referencedColumnName="id")
)
private List<Permission> permissions;
// getters and setters
}
```
Permission类:
```
@Entity
public class Permission {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@ManyToMany(mappedBy = "permissions", cascade = CascadeType.REMOVE)
@JsonIgnore
private List<Role> roles;
// getters and setters
}
```
阅读全文