Java 它不会将所有对象从列表传输到集合

Java 它不会将所有对象从列表传输到集合,java,spring,spring-mvc,spring-boot,Java,Spring,Spring Mvc,Spring Boot,我的实体有一个列表 @OneToMany(mappedBy = "movie", orphanRemoval = true, cascade = CascadeType.ALL, fetch = FetchType.LAZY) @OrderBy("date ASC") private List<MovieReleaseDateEntity> releaseDates = new ArrayList<>(); 我添加到流中 .peek(System.out::printl

我的实体有一个列表

@OneToMany(mappedBy = "movie", orphanRemoval = true, cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@OrderBy("date ASC")
private List<MovieReleaseDateEntity> releaseDates = new ArrayList<>();
我添加到流中

.peek(System.out::println)
定期检查正在发生的事情

[EL Fine]: sql: 2018-06-04 16:57:48.791--ServerSession(344583521)--Connection(1451502475)--SELECT ID, budget, favorite_count, rating, status, title, type FROM movies WHERE ((ID = ?) AND (status = ?))
    bind => [2, ACCEPTED]
[EL Fine]: sql: 2018-06-04 16:57:48.798--ServerSession(344583521)--Connection(579647155)--SELECT ID, dtype, entity_version, reported_for_delete, reported_for_update, status, movie_id, release_date_country, release_date FROM movies_info WHERE ((movie_id = ?) AND (dtype = ?)) ORDER BY release_date ASC
    bind => [2, RELEASE_DATE]
MovieReleaseDateEntity(super=MovieInfoEntity(id=6, status=ACCEPTED, reportedForUpdate=false, reportedForDelete=false), date=Thu May 03 00:00:00 CEST 2018, country=POLAND)
MovieReleaseDateEntity(super=MovieInfoEntity(id=6, status=ACCEPTED, reportedForUpdate=false, reportedForDelete=false), date=Thu May 03 00:00:00 CEST 2018, country=POLAND)
{"date":"2018-05-02","country":"POLAND"} // found the first object
MovieReleaseDateEntity(super=MovieInfoEntity(id=5, status=ACCEPTED, reportedForUpdate=false, reportedForDelete=false), date=Sat Jun 02 00:00:00 CEST 2018, country=USA)
MovieReleaseDateEntity(super=MovieInfoEntity(id=5, status=ACCEPTED, reportedForUpdate=false, reportedForDelete=false), date=Sat Jun 02 00:00:00 CEST 2018, country=USA)
{"date":"2018-06-01","country":"USA"} // found the second object
MovieReleaseDateEntity(super=MovieInfoEntity(id=3, status=ACCEPTED, reportedForUpdate=false, reportedForDelete=false), date=Sun Jun 03 00:00:00 CEST 2018, country=USA)
MovieReleaseDateEntity(super=MovieInfoEntity(id=3, status=ACCEPTED, reportedForUpdate=false, reportedForDelete=false), date=Sun Jun 03 00:00:00 CEST 2018, country=USA)
{"date":"2018-06-02","country":"USA"} // found the third object
MovieReleaseDateEntity(super=MovieInfoEntity(id=1004, status=WAITING, reportedForUpdate=false, reportedForDelete=false), date=Mon Jun 04 00:00:00 CEST 2018, country=POLAND)
MovieReleaseDateEntity(super=MovieInfoEntity(id=4, status=ACCEPTED, reportedForUpdate=false, reportedForDelete=false), date=Tue Jun 05 00:00:00 CEST 2018, country=USA)
MovieReleaseDateEntity(super=MovieInfoEntity(id=4, status=ACCEPTED, reportedForUpdate=false, reportedForDelete=false), date=Tue Jun 05 00:00:00 CEST 2018, country=USA)
{"date":"2018-06-04","country":"USA"} // found the fourth object
MovieReleaseDateEntity(super=MovieInfoEntity(id=1005, status=WAITING, reportedForUpdate=false, reportedForDelete=false), date=Tue Jun 05 00:00:00 CEST 2018, country=USA)
2018-06-04 16:57:48.925 DEBUG 2308 --- [nio-8443-exec-9] m.m.a.RequestResponseBodyMethodProcessor : Written [[{"date":"2018-05-02","country":"POLAND"}]] as "application/json" using [org.springframework.http.converter.json.MappingJackson2HttpMessageConverter@590013c7]
如您所见,尽管它过滤了4个对象,但只有一个第一个对象被设置为
集合
集合

        return this.findMovie(id).getReleaseDates()
            .stream()
            .peek(System.out::println)
            .filter(releaseDate -> releaseDate.getStatus() == DataStatus.ACCEPTED)
            .peek(System.out::println)
            .map(ServiceUtils::toReleaseDateDto)
            .peek(System.out::println)
            .collect(Collectors.toSet());
Written [[{"date":"2018-05-02","country":"POLAND"}]]
延伸


为什么会发生这种情况?

几天前您没有问过几乎相同的问题吗?您是否在实体中重写了equals方法?正如您所知,集合可以保留唯一的对象,为了确定在添加新对象时它是否已出现在集合中,将使用objects equals方法。