spring-data-jdbc 可以处理1对1,1对多的业务场景,
但是如果碰到多对多映射关系,应该要怎么弄呢?请各位大虾分享点思路,谢谢啦~~
@OneToMany和@ManyToMany注解
或者使用@JoinTable注解来定义多对多关系,并使用一个关联实体
【以下回答由 GPT 生成】
对于多对多关系,spring-data-jdbc提供了一种简单的处理方式,可以通过使用嵌入式Entity来实现。下面是一种常见的处理方式:
@Table("users")
@Data
class User {
@Id
private Long id;
private String name;
@Embedded(onEmpty = EMPTY)
private Set<UserRole> roles;
}
@Table("roles")
@Data
class Role {
@Id
private Long id;
private String name;
@Embedded(onEmpty = EMPTY)
private Set<UserRole> users;
}
@Data
class UserRole {
private Long userId;
private Long roleId;
}
interface UserRepository extends CrudRepository<User, Long> {
}
interface RoleRepository extends CrudRepository<Role, Long> {
}
@Service
class UserService {
private final UserRepository userRepository;
private final RoleRepository roleRepository;
public UserService(UserRepository userRepository, RoleRepository roleRepository) {
this.userRepository = userRepository;
this.roleRepository = roleRepository;
}
public void assignRole(Long userId, Long roleId) {
User user = userRepository.findById(userId);
Role role = roleRepository.findById(roleId);
if (user != null && role != null) {
UserRole userRole = new UserRole();
userRole.setUserId(user.getId());
userRole.setRoleId(role.getId());
if (user.getRoles() == null) {
user.setRoles(new HashSet<>());
}
if (role.getUsers() == null) {
role.setUsers(new HashSet<>());
}
user.getRoles().add(userRole);
role.getUsers().add(userRole);
userRepository.save(user);
roleRepository.save(role);
}
}
public void removeRole(Long userId, Long roleId) {
User user = userRepository.findById(userId);
Role role = roleRepository.findById(roleId);
if (user != null && role != null) {
UserRole userRole = user.getRoles().stream()
.filter(r -> r.getRoleId().equals(roleId))
.filter(r -> r.getUserId().equals(userId))
.findFirst()
.orElse(null);
if (userRole != null) {
user.getRoles().remove(userRole);
role.getUsers().remove(userRole);
userRepository.save(user);
roleRepository.save(role);
}
}
}
}
@Service
class MyService {
private final UserService userService;
public MyService(UserService userService) {
this.userService = userService;
}
public void assignRoleToUser(Long userId, Long roleId) {
userService.assignRole(userId, roleId);
}
public void removeRoleFromUser(Long userId, Long roleId) {
userService.removeRole(userId, roleId);
}
}
这样,你就可以利用spring-data-jdbc来处理多对多映射关系了。希望对你有帮助!如果还有其他问题,请随时提问。
【相关推荐】