我有许多与附加列。在这里实现(受Lombok生成getter/setter方法,为清楚起见移除):休眠ManyToMany与列子删除
public class User extends BaseEntity {
@OneToMany(mappedBy = "user",
orphanRemoval = true,
fetch = FetchType.LAZY
cascade = CascadeType.ALL,)
private List<UserEvent> attendeeEvents = new ArrayList<>();
}
@Table(
name = "UC_USER_EVENT",
uniqueConstraints = {@UniqueConstraint(columnNames = {"user_id", "event_id"})}
)
public class UserEvent extends BaseEntity {
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "event_id")
private Event event;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "user_id")
private User user;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "user_response_id")
private UserResponse userResponse;
}
public class Event extends BaseEntity {
@OneToMany(mappedBy = "event",
orphanRemoval = true,
fetch = FetchType.EAGER,
cascade = CascadeType.ALL)
private List<UserEvent> userEvents = new ArrayList<>();
}
我想这一点 - 当我删除事件,所有连接到它“UserEvents”应该被删除。如果我删除用户,所有“UserEvents”也应该删除。
删除我的事件(eventRepository是春天JPA接口):
eventRepository.delete(event);
从数据库然后检索UserEvents:
List<UserEvent> userEvents = userEventsId.stream()
.map(id -> entityManager.find(UserEvent.class, id)).collect(Collectors.toList());
而且还有收藏有2项(这是UserEvents的计数) ,但他们都是“空”。
我无法理解发生了什么以及如何正确执行。 我需要他们删除,当我检查收集应该有0,而不是2.
为什么你的多对一映射标有'CascadeType.ALL'?应该删除一个'UserEvent'还删除相关的'User'? – crizzis
关于你的问题,在不调用filter()的情况下调用两个元素流上的'map()'产生一个流,该流仍然有两个元素 – crizzis
我确信它是休眠问题...谢谢!我已经在UserEvent上删除了CascadeType.All,但完全不知道map()。 – Evgenii