【问题标题】:List<Object> is return size = 30 when it only has one object in it Springboot当 List<Object> 只有一个对象时返回 size = 30 Springboot
【发布时间】:2022-01-29 22:08:35
【问题描述】:

我有一些映射将List&lt;Entrants&gt; 保存在Event 实体中,每次将新的Entrants 保存到Event 时,我都会将Entrant 添加到List&lt;Entrants&gt; 但是当我得到List&lt;Entrants&gt; 它说 size = 30 即使我只有一个 Entrants 对象。它似乎总是加 30,所以如果我保存 4 Entrants 它会说它是 120。

保存新的Entrants 时,

public void save(String event, long memberId) {
    Event e = eventRepo.findEventByName(event);
    Member m = memberRepo.getOne(memberId);
    Entrants en = new Entrants(m, e, 0, 0);
    //Update the current entrants entered in an event by 1
    e.setCurrentEntrants(e.getCurrentEntrants() + 1);
    eventRepo.save(e);
    //Get the current list of entrants for this event
    List<Entrants> entrants = e.getEntrants();
    //Add the current entrant to the list of entrants for this event.
    entrants.add(en);
    entrantsRepo.save(en);
}

在运行此代码以添加新的Entrant 后,它可以正常工作,并且在调用entrants.add(en) 后,List&lt;Entrants&gt; entrants 的大小如预期的那样为 1。

当我然后调用getEntrants() 时(注意我想返回一个 List 因此返回类型)

public List<Member> getEntrants(String eventName){
    Event event = eventRepo.findEventByName(eventName);
    List<Entrants> entrants = event.getEntrants();
    List<Member> members = new ArrayList<>();
    for(Entrants entrant: entrants) {
        members.add(entrant.getMember());
    }
    System.out.println(entrants.size());
    return members;
}

它说 `List is 30!它显示 30 名参赛者完全相同。如果我保存 4 个不同的参赛者,那么它会显示第一个参赛者的 30 个,然后是下一个参赛者的 30 个,依此类推。

【问题讨论】:

    标签: spring-boot spring-data-jpa


    【解决方案1】:

    Event 实体中更改我的映射解决了这个问题。我将 fetch 从 EAGER 更改为 LAZY 我找不到任何东西来解释为什么 EAGER 会返回每个 Entrants 对象中的 30 个。

        @JsonIgnore
        @OneToMany(mappedBy = "event", fetch = FetchType.LAZY) //Was previously EAGER
        private List<Entrants> entrants;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-08-30
      • 1970-01-01
      • 2010-12-27
      • 1970-01-01
      • 2016-03-04
      • 2017-12-03
      • 1970-01-01
      相关资源
      最近更新 更多