首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Spring : Entitie多次加载

Spring : Entitie多次加载
EN

Stack Overflow用户
提问于 2022-04-26 11:17:05
回答 3查看 158关注 0票数 1

所以我有一个叫做建筑的实体和另一个叫做建筑单位的实体之间的关系。一座建筑可以有很多建筑单元。所以一个标准的一对多的关系。我面临的问题是,建筑单元的每个实体都被加载了16次,而不是预期的一个。

代码语言:javascript
运行
复制
 public class Building {
    @OneToMany(mappedBy = "building",fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    @JsonManagedReference //<- without this an endless recursion would appear
    private List<buildingUnit> buldingUnits;
    }
代码语言:javascript
运行
复制
public class buildingUnit{
    @ManyToOne()
    @JoinColumn(name = "building_id, nullable = false)
    @JsonBackReference
    private Building building
}

建筑物也与不同的阶级有关系,建筑单位也与不同的阶级有更多的关系,但我不认为他们会产生这种行为。我闭口不谈,在数据库中,一切都是正确存储的。每个建筑单元只存储一次,并有一个建筑物的锻造钥匙.所以这个问题必须来自于代码。

我的实体之间的关系有点像这样:

代码语言:javascript
运行
复制
            BuildingUnit    ->
Building ->                    Room -> Wall 
            VentilationZone -> 

建筑单元和通风区域可以有不同的房间。

从DB加载建筑物时的结果:

代码语言:javascript
运行
复制
Building:
 buildingUnit: [u1, u1, u1, u1, u1,..., u2, u2, u2, u2,...]  

我使用的DB是一个SQLite DB

EN

回答 3

Stack Overflow用户

发布于 2022-04-26 11:28:26

我不确定您是否发布了整个代码,但我认为您缺少@Entity@Id。如以下示例所示:

代码语言:javascript
运行
复制
@Entity
public class Building {
  @Id
  @GeneratedValue(strategy=GenerationType.AUTO)
  private Long id;

...

如果它没有解决问题,那么实现equalshashcode方法可能是值得的。

票数 0
EN

Stack Overflow用户

发布于 2022-04-27 21:13:08

也许是因为您的建筑实体中的其他集合被急切地获取,这将导致笛卡儿产品的双重左外连接。

票数 0
EN

Stack Overflow用户

发布于 2022-04-26 12:18:53

工作范围:

我找不到解决这个问题的办法,但我找到了一个解决办法,可以删除所有重复的内容。在加载建筑物的仓库中,我运行一个简短的函数,删除所有重复的对象:

代码语言:javascript
运行
复制
private void removeDubplicates(Building building){
    building.setBuildingUnits(
        building.getBuildingUnits.stream()
                                 .distinct()
                                 .collect(Collectors.ToList())                        
    );
}

我认为这是因为列表中的每个重复都是同一个对象(o1 == o2)。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72012981

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档