【发布时间】:2020-11-26 01:55:39
【问题描述】:
我有用户和角色。每个用户可以有多个角色。
我想要进行批量操作,例如删除所有用户角色但保留用户和角色。 那么我怎样才能只截断 manyToMany 表呢?
很长的路要走 findAllUsers -> 对于每个 user.roles = new Hashset() -> saveAll(users)
@Entity
@Table
public class Role {
@Id
@Column(name = "id", unique = true, nullable = false)
private Long id;
@ManyToMany(mappedBy = "roles")
private Set<User> users = new HashSet<>();
}
@Entity
@Table
public class User {
@Id
@Column(name = "id", unique = true, nullable = false)
private Long id;
@ManyToMany(cascade = {CascadeType.DETACH, CascadeType.MERGE, CascadeType.PERSIST})
@JoinTable(
name = "UserRole",
joinColumns = {@JoinColumn(name = "id")},
inverseJoinColumns = {@JoinColumn(name = "id")})
private Set<Role> roles = new HashSet<>();
}
@Repository
public interface UsersRepository extends JpaRepository<User, Long> {
@Modifying
@Query("UPDATE User u SET u.roles = null")
void clearAllRoleRelations();
}
我已经尝试过了,但是得到了一个异常 不支持 DML 操作 [UPDATE users.entity.User u SET u.roles = null]
【问题讨论】:
-
你能展示你的实体吗?
-
更新方法应该返回一个 int 或 void。也尝试添加
@Transactional
标签: java spring-data-jpa many-to-many jpql