首页 > 解决方案 > 实体关系设计以避免递归(多对多)

问题描述

我正在构建一个小应用程序,它是爱沙尼亚语-英语-爱沙尼亚语词典。英语和爱沙尼亚语单词在数据库中表示为实体(表)。每个实体都包含关于其语言的单词/短语和翻译列表List<Translation language>。我在它们之间有多对多的关系——这意味着许多英语单词有许多爱沙尼亚语翻译,许多爱沙尼亚语单词有许多英语翻译。(在我看来这是合乎逻辑的)。当我获取任何一种语言的单词并获取 JSON 表示时,我遇到了这个问题 - 发生无限循环,这是预期的,因为每个实体都包含相反实体的列表,而这些实体包含相反实体的列表等等......如何有可能解决这个问题吗?注意:我尝试添加@JsonIgnore到任何一方 - 但是当我获取这个侧面实体时,我还没有解决其他实体的列表,反之亦然。@JsonManaged@JsonBacked不要解决问题。我需要解决双方实体但不递归。

@Entity
@Table(name = "english_word")
public class EnglishWord {

   @Id
   @GeneratedValue(strategy = GenerationType.IDENTITY)
   private Long id;

   @Column(name = "word")
   private String word;


   @ManyToMany(cascade = CascadeType.PERSIST)
   @JoinTable(name = "estonian_english",joinColumns = @JoinColumn(name = "englishWord_id")
   ,inverseJoinColumns = @JoinColumn(name = "estonianWord_id"))
   private List<EstonianWord> translations = new ArrayList<>();

   public EnglishWord(String word) {
       this.word = word;
   }

   public EnglishWord() {
   }
-------------------------------------------------------------------

@Entity
@Table(name = "estonian_word")
public class EstonianWord {

   @Id
   @GeneratedValue(strategy = GenerationType.IDENTITY)
   private Long id;

   @Column(name = "word")
   private String word;


   @ManyToMany(cascade = CascadeType.PERSIST)
   @JoinTable(name = "estonian_english",joinColumns = @JoinColumn(name = "estonianWord_id")
           ,inverseJoinColumns = @JoinColumn(name = "englishWord_id"))
   private List<EnglishWord> translations = new ArrayList<>();

   public EstonianWord(String word) {
       this.word = word;
   }

   public EstonianWord() {
   }


标签: javaspring-boothibernatejacksonh2

解决方案


您可以使用自己的 DTO 对象来表示请求/响应。


推荐阅读