java - 实体关系设计以避免递归(多对多)
问题描述
我正在构建一个小应用程序,它是爱沙尼亚语-英语-爱沙尼亚语词典。英语和爱沙尼亚语单词在数据库中表示为实体(表)。每个实体都包含关于其语言的单词/短语和翻译列表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() {
}
解决方案
您可以使用自己的 DTO 对象来表示请求/响应。
推荐阅读
- c# - Dapper 内部的 QuerySingle 或 QueryFirst 是如何工作的?
- c++ - 如何在 C++ 中转换字节向量(std::vector
) 到不同的 uint32_t、uint16_t 和 uint8_t 变量中 - javascript - 数据库中的数据 --> 到 .php 中的 json 数组 --> 这个数组到 .js 中的表中,然后通过调用 .js 文件在 .html 中可视化它
- web-applications - 我需要学习什么来开发交互式 Web 应用程序而不仅仅是网站?
- django - 带有 ATOMIC_REQUESTS=True 的 Django 信号
- git - 从 bitbucket 存储库克隆时出错
- .net - 如何检查“非前缀”
- solr - 如何在 Solr Streaming 中使用 Rank over partition by
- python - Azure 函数应用和事件中心消息 - 函数停止工作
- javascript - 解析Xml大文件关闭服务器nodejs