JPA delete выполняет запрос на обновление в фоновом режиме - PullRequest
0 голосов
/ 03 марта 2020

Я пытаюсь удалить свою сущность JPA из базы данных, используя JpaRepository.deleteById () , но получаю странную ошибку:

NULL not allowed for column "USER_ID"; SQL statement:
update event set from_date=?, name=?, user_id=?, until_date=? where id=? [23502-199]

Как видите, она выполняет запрос UPDATE , но я не знаю почему.

Моя модель выглядит следующим образом

@Entity
@Data
@NoArgsConstructor
public class Event {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(nullable = false)
    private String name;

    @ManyToOne
    @JoinColumn(name = "user_id", referencedColumnName = "id", nullable = false)
    private User organizer;

    @Temporal(TemporalType.TIMESTAMP)
    @Column(nullable = false)
    private Date fromDate;

    @Temporal(TemporalType.TIMESTAMP)
    @Column(nullable = false)
    private Date untilDate;

    @ManyToMany(cascade = CascadeType.ALL)
    @JoinTable(
            name = "event_allowed_users",
            joinColumns = @JoinColumn(name = "event_id"),
            inverseJoinColumns = @JoinColumn(name = "user_id"))
    private List<User> allowedUsers;
}
@Data
@Entity
@NoArgsConstructor
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(unique = true)
    private String user;

    @Column(unique = true)
    private String mail;

    private boolean active;
}

У меня также есть свой собственный SQL запросы схемы

create table user (id bigint NOT NULL AUTO_INCREMENT, active boolean not null, mail varchar(255) not null unique, user varchar(255), primary key (id));

create table event (id bigint NOT NULL AUTO_INCREMENT, name varchar(255), from_date timestamp not null, until_date timestamp not null, user_id bigint not null, primary key (id));

alter table event add constraint fk_user_id1 foreign key (user_id) references user(id);

create table event_allowed_users (event_id bigint, user_id bigint, foreign key (event_id) references event(id) on delete cascade, foreign key (user_id) references user(id) on delete cascade);

Есть идеи, где я допустил ошибку?

1 Ответ

0 голосов
/ 04 марта 2020

Я решил проблему, но не ORM .

Я использовал собственный запрос , чтобы удалить событие, и оно работает как чудо. Он удаляет событие, а также таблицу отношений ManyToMany.

Мой сервис выглядит следующим образом:

@Resource
    private EventRepository eventRepository;

@Transactional
public void deleteEvent(Long id) {
    eventRepository.customDelete(id);
}

Мне пришлось добавить @ Transactional , так как операция DELETE требует быть выполненным в транзакции.

Это собственный запрос к хранилищу:

@Modifying
@Query(value = "DELETE FROM event WHERE id = ?1", nativeQuery = true)
    void customDelete(Long id);

При использовании INSERT, UPDATE, DELETE необходимо использовать @ Modifying для запрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...