Я пытаюсь соединить сущность (пользователя) с создаваемыми ими сущностями, которые будут Surveys.
У меня есть два репозитория, один UserRepository и один SurveyRepository.Я могу загрузить опросы, в соответствии с тем, у кого они есть, и в настоящее время все они отображаются с помощью идентификатора пользователя, который является полем в объекте опроса.
Однако, когда я пытаюсь удалить Survey, это удаляет моего пользователя всякий раз, когда я определяю CascadeType.ALL.
Но когда я не использую это, я получаю еще одну ошибку ", вызванную:java.sql.SQLIntegrityConstraintViolationException: "
Я думаю, все это связано с шифрованием пароля, которое я использую, но я даже не пытаюсь удалить сущность User, я просто удаляю Survey,который содержит ссылку или идентификатор для опроса ..
Я пробовал CascadeType.All с обеих сторон, и я также пытался вообще не иметь никакого CascadeType .. Если он у меня включенс обеих сторон, это удаляет пользователя всякий раз, когда я сообщаю свой surveyRepository.delete (currentSurvey);И когда у меня его нет на обеих сторонах, я получаю исключение выше ..
Пользовательский объект:
@Entity
@Table(name = "user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "user_id")
private Long id;
@NotEmpty
@Email
@Column(unique = true)
private String email;
private String password;
@NotBlank
private String username;
@NotBlank
private String firstName;
@NotBlank
private String lastName;
@NotBlank private String role;
@OneToMany(fetch = FetchType.EAGER)
private Set<Survey> surveys = new HashSet<>();
Объект опроса:
@Entity
@Table(name = "survey")
public class Survey {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "survey_id")
private Long id;
private String title, creator, description;
private LocalDate date = LocalDate.now();
@OneToMany(orphanRemoval = true, cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinColumn(name = "survey_id")
@OrderBy("position ASC")
private Set<Question> questions = new HashSet<>();
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "user_id")
private User user;
IЯ просто не уверен, как я могу сказать JPA / Hibernate не трогать пользователя всякий раз, когда мы удаляем опрос.
Неважно, если я сохраню пользователя с Survvey или нет, не так ли?
В основном я перепробовал много вариантов, и мне кажется, что я не совсем понял проблему, и я подозреваю, что речь идет об аннотациях на стороне пользователя, но я все еще чувствую, что должен иметь возможность удалить дочернюю сущность.без проблем, так как я не касаюсь родительской сущности?