当前位置: 首页 > 知识库问答 >
问题:

如何在spring boot中公开多对多关系

常培
2023-03-14

我面临一个问题。。我在SpringBoot中与jpa有多对多关系,但我需要公开以下产品有很多标签,标签有很多产品

如果查询产品/1

{product:{name:"product 1"}, tags:[ tag1:{name:"tag 1"}, tag2:{name:"tag2"} ] }

if查询标签/1

{标签: 1,产品:[product1:[{名称:"产品1"}, tag2:{产品:"tag2"} ] }

什么是方法来暴露这与Rest与Spring启动?一个例子,网址或和想法这将是有用的。

共有2个答案

夏侯林
2023-03-14

有多种方法可以停止无限递归:

  1. @JsonManagedReference@JsonBackReference
@Entity
public class Product {
    @ManyToMany
    @JsonManagedReference
    private List<Tag> tags = new ArrayList<Tag>();
}

@Entity
public class Tag implements {
    @ManyToMany(mappedBy = "tags")
    @JsonBackReference
    private List<Product> products = new ArrayList<Product>();
}
@Entity
public class Product {
    @ManyToMany
    private List<Tag> tags = new ArrayList<Tag>();
}

@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id")
@Entity
public class Tag implements {
    @ManyToMany(mappedBy = "tags")
    private List<Product> products = new ArrayList<Product>();
}
@Entity
public class Product {
    @ManyToMany
    @JsonIgnoreProperties("products")
    private List<Tag> tags = new ArrayList<Tag>();
}

@Entity
public class Tag implements {
    @ManyToMany(mappedBy = "tags")
    @JsonIgnoreProperties("tags")
    private List<Product> products = new ArrayList<Product>();
}
公冶谦
2023-03-14

当您尝试序列化JPA bean时,您需要使用@JsonManaged参考@JsonBack参考注释的组合来阻止无限递归的发生。

看看这些问题,了解更多信息:

  • @JsonIgnore和@JsonBackReference、@JsonManagedReference之间的区别
 类似资料:
  • 嗨,我有一个角色表和一个权限表,它有多对多的关系。我已经创建了下面链接中提到的实体 https://www.baeldung.com/jpa-多对多 角色实体 权限实体 我已经为每个实体创建了JPA存储库,并且正在尝试将权限保存给一个角色。我在表中已经有了一组/列表的权限,我正在尝试将它们映射到某个角色。我正在尝试使用spring JPA存储库执行下面的代码。 在执行我得到的代码时 org.hib

  • 问题内容: 在关系数据库中,我有一个用户表,一个类别表和一个用户类别表,它们之间存在多对多关系。在Redis中具有这种结构的更好形式是什么? 问题答案: 使用Redis,关系通常由集合表示。一组可用于表示单向关系,因此每个对象需要一组以表示多对多关系。 尝试将关系数据库模型与Redis数据结构进行比较是毫无用处的。使用Redis,所有内容均以非规范化方式存储。 例: 一旦有了此数据结构,就可以使用

  • 问题内容: 我相信标题是不言而喻的。如何在PostgreSQL中创建表结构以建立多对多关系。 我的例子: 问题答案: SQL DDL(数据定义语言)语句如下所示: 我强烈建议您这样做,因为产品名称几乎不是唯一的(不是很好的“自然键”)。此外,强制使用唯一性并在外键中引用该列通常比使用存储为或的字符串便宜(4字节(甚至8字节))。 不要使用基本数据类型的名称作为 标识符 。尽管这是可能的,但这是不好

  • 问题内容: 我正在制作一个具有多对多关系的SQLite数据库,并使用以下代码将其分解为两个一对多的关系 错误: 有谁知道我该如何解决这个错误? 问题答案: 查看文档; 它向您表明,如果您在字段定义本身上指定了外键,则不应使用关键字本身。此外,正如 CL 指出的那样,您使用了太多逗号 。 ,即使单独指定约束,外键名称也不应放在括号中。 该语句可以满足您的要求: 还要注意,如果MODULEID是表MO

  • 我对MongoDB中的多对多关系实现有一个特定的问题。 我收集了歌曲和艺术家的作品(数百万份文档)。在这里,这首歌可以被许多艺术家演唱,一个艺术家可以唱许多首歌。所以我在两个集合中都遵循了文档引用的方法。像这样... 1.歌曲集:- 2.艺术家收藏:- 但这里的问题是,在删除艺术家的同时,我必须从歌曲所有文档中的艺术家数组中删除一个艺术家,如果该文档中有艺术家,反之亦然。这会导致原子性问题。我如何

  • 作为这个问题的一个例子,让我使用电视节目、电影和演员。每个电视节目和电影都有多个演员,每个演员都在一个或多个电视节目和/或电影中。如果我在他们之间建立一个多态的多对多关系,我似乎可以分别查询一个演员的所有电视节目和所有电影,但尽管我可以用谷歌搜索,我还没有找到一种方法来查询一个演员的所有电视节目和/或电影在一个集合中的联合。这难道不是多对多多态关系的有用之处吗? 如果事实证明这确实是可能的,我可能