java JPA delete在后台执行更新查询
我正在尝试使用JpaRepository从数据库中删除我的JPA实体。deleteById(),但我遇到了一个奇怪的错误:
NULL not allowed for column "USER_ID"; SQL statement:
update event set from_date=?, name=?, user_id=?, until_date=? where id=? [23502-199]
如您所见,它执行一个更新查询,但我不知道为什么
我的模型看起来像这样
@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 楼答案
我已经解决了这个问题,但不是用ORM的方法
我使用了本地查询来删除事件,它就像一个符咒。它删除事件以及多个关系表
我的服务如下所示:
我必须添加@Transactional,因为需要在事务中执行删除操作
这是存储库本机查询:
使用INSERT、UPDATE、DELETE时,您需要使用@MODIFING进行查询