Я пытаюсь сохранить пользователя.Пользовательский объект и групповой объект имеют двунаправленное отношение «многие ко многим».Однако группы уже сохранены в базе данных (только две: администратор и пользователь).
Здесь я просто "подделал" группу, которая уже существует, потому что я думал, что это сработает.Я не могу добавить cascade = CascadeType.PERSIST
для пользователя, потому что тогда он снова сохранит группу, что приведет к дублированию данных.Как бы это исправить?
Из EJB
public void persistAsUser(User user) {
Group group = new Group(2L, "user");
user.addGroup(group);
userRepository.persist(user);
}
javax.ejb.EJBException: транзакция прервана
Причина: java.lang.IllegalStateException:Во время синхронизации был обнаружен новый объект через связь, которая не была помечена каскадом PERSIST:
Вот сущности:
@Entity
@Table(name = "app_user")
public class User implements Serializable {
public static final String ALL = "User.all";
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String firstName;
private String lastName;
private Integer age;
private String username;
private String email;
private String password;
@ManyToMany(mappedBy = "users")
private List<Group> groups;
....
public void addGroup(Group group) {
if (!getGroups().contains(group)) {
getGroups().add(group);
}
if (!group.getUsers().contains(this)) {
group.getUsers().add(this);
}
}
}
и
@Entity
public class Group implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String groupName;
@ManyToMany
@JoinTable(joinColumns = {@JoinColumn(name="group_id")}, inverseJoinColumns = {@JoinColumn(name="user_id")})
private List<User> users;
....
}