【发布时间】:2022-01-18 07:50:53
【问题描述】:
我找不到在 Spring Boot 中使用 ManyToMany 插入数据的方法。谁能建议我如何在 Spring Boot 和 Hibernate 中使用 M-To-M 保存数据。
下面是我的代码。
实体
@Entity
@Table(name = "user_master")
public class Users {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer user_id;
private String name;
@JsonManagedReference
@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@JoinTable(name = "users_roles", joinColumns = { @JoinColumn(name = "user_id") }, inverseJoinColumns = {
@JoinColumn(name = "role_id") })
private Set<Roles> roles;
// constructor and getter/setter
}
@Entity
@Table(name = "role_master")
public class Roles {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer role_id;
private String name;
@JsonBackReference
@ManyToMany(cascade = CascadeType.ALL, mappedBy = "roles")
private Set<Users> users;
// constructor and getter/setter
}
服务
@Override
public Set<Users> addAddressPerson(Set<Users> users) {
for(User user: users) {
for(Roles roles: user.getRoles()) {
roles.getUsers().add(user); // problem is in here
}
}
return users.stream().map(userRepo::save).collect(Collectors.toSet());
}
邮递员
[
{
"name": "Michael",
"roles": [
{
"name": "Project Manager"
},
{
"name": "Software Developer"
}
]
}
]
错误
"message": "无法调用 "java.util.Set.add(Object)" 因为 "com.rest.RestApiPojo.Entity.Roles.getUsers()" 的返回值为 null"
【问题讨论】:
-
1) 您需要额外的
for循环来迭代users集合。 2)您正在尝试将List类型的参数分配给Set类型的属性,需要转换 -
@NikolaiShevchenko 我根据您的建议进行了更改,但在返回
UserRepo.save(users)时出现错误the method save(S) in the type CrudRepository<Users,Integer> is not applicable for the arguments (Set<Users>) -
您正在寻找 saveAll 功能:docs.spring.io/spring-data/jpa/docs/current/api/org/… 另外请务必查看这篇关于开启批处理的帖子:baeldung.com/spring-data-jpa-batch-inserts
标签: spring-boot hibernate