Hibernate ManyToMany与列子删除

时间:2017-07-06 13:37:22

标签: java spring hibernate jpa

我有很多很多额外的专栏。这里实现(由lombok生成的getter / setter,为清晰起见而删除):

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<>();
}

我想要这个 - 当我删除Event时,应删除所有连接到它的“UserEvents”。如果我删除User,则也应删除所有“UserEvents”。

我删除了我的事件(eventRepository是Spring Jpa接口):

 eventRepository.delete(event);

然后从db:

中检索UserEvents
List<UserEvent> userEvents = userEventsId.stream()
.map(id -> entityManager.find(UserEvent.class, id)).collect(Collectors.toList());

并且有2个项目的集合(这是UserEvents的数量),但它们都是“null”。

我无法理解发生了什么以及如何正确行事。 我需要删除它们,当我检查收集时,应该是0,而不是2。

1 个答案:

答案 0 :(得分:1)

删除标记为删除,请在删除后尝试调用flush,然后查找。

我想找到数据库,找到两行,但是当试图实例化它们时,找到标记为删除的实体,然后你有这种奇怪的行为。

Recomendation:尝试从数据库中抽象出更多,并使用更少的注释。了解列和表的名称约定(如果需要),让JPA完成它的工作。