我有許多與附加列。在這裏實現(受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