春季启动JPA:在自连接关系中以JSON视图进行递归

巴斯·布鲁纳克

对于我要构建的项目,我需要从用户类到类用户的多对多关系(用户有Friends,而Friends是Users的朋友)。当尝试使用JPA将Json退出SpringBoot时。我在JSON上获得了一个递归循环(仅当两个用户是彼此的朋友时才会发生)

我知道会发生什么,但找不到解决问题的办法。如您所见,我正在使用不同的视图来“过滤”视图。问题是:如何停止递归?

@Entity
public class User {
    @Id
    @GeneratedValue
    @JsonView(JsonViews.UserView.class)
    private long userId;
    @JsonView(JsonViews.UserView.class)
    private String username;
    @JsonView(JsonViews.UserView.class)
    private String password;
    @JsonView(JsonViews.UserView.class)
    private String email;
    @JsonView(JsonViews.UserView.class)
    private String location;
    //private String avatar;
    @JsonView(JsonViews.UserView.class)
    private int ranking;
    private String UserStatus;

    //Friend Relation Many > Many
    @JsonView({JsonViews.UserView.class, JsonViews.FriendWith.class})
    @ManyToMany()
    private List<User> friendsWith;
    @ManyToMany(mappedBy = "friendsWith")
    private List<User> friendOf;
    @JsonView({JsonViews.UserView.class, JsonViews.Player.class})
    @OneToMany(mappedBy = "user")
    private List<Player> player;

    public User() {
        this.friendsWith = new ArrayList<>();
        this.friendOf = new ArrayList<>();
    }

    public User(String username, String password, String email, String location, int ranking) {
        this();
        //this.userId = userId;
        this.username = username;
        this.password = password;
        this.email = email;
        this.location = location;
        this.ranking = ranking;

    }
// and th usual getters and setters

堆栈:

2019-12-10 22:17:52.414 ERROR 1618 --- [nio-8084-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() 
for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.http.converter.HttpMessageNotWritableException: Could not write JSON: Infinite recursion (StackOverflowError); nested exception is com.fasterxml.jackson.databind.JsonMappingException: Infinite recursion (StackOverflowError) (through reference chain: org.hibernate.collection.internal.PersistentBag[0]->
nl.hva.ewa.stratego.backend.models.User["friendsWith"]->
org.hibernate.collection.internal.PersistentBag[0]->
nl.hva.ewa.stratego.backend.models.User["friendsWith"]->
org.hibernate.collection.internal.PersistentBag[0]->
nl.hva.ewa.stratego.backend.models.User["friendsWith"]->
org.hibernate.collection.internal.PersistentBag[0]->
nl.hva.ewa.stratego.backend.models.User["friendsWith"]->
ETC.... ETC.....

为了完整起见,JsonViews类:


public class JsonViews {
    public class UserView { };
    public class AComplete extends UserView { };
    public class BComplete extends UserView { };
    public class FriendsWith extends UserView {};
    public class FriendsOf extends UserView {};

    public class Player extends UserView {};
}
弗朗贾维

尝试使用@JsonIdentityInfo批注,您可以在其中告诉杰克逊什么是POJO ID,因此不再重复它:

@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "userId")
public class User {
    public long userId;
    public String name;
    public List<User> friends;
}

这将生成以下JSON:

  {
  "userId" : 11,
  "name" : "A",
  "friends" : [ {
    "userId" : 22,
    "name" : "B",
    "friends" : [ 11, {
      "userId" : 33,
      "name" : "C",
      "friends" : [ ]
    } ]
  } ]
}

请注意,在内部用户B中,如果已将用户添加到JSON主体中,则好友列表仅包含ID [ 11, {

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

EF CodeFirst AddColumn到自连接关系

来自分类Dev

查询仅连接关系中的最后一行

来自分类Dev

创建具有自联接关系的资产时出现递归错误

来自分类Dev

春季启动-使用JPA在关系数据库中存储和检索数据时出现UnsatisfiedDependencyException

来自分类Dev

用Ruby Object Mapper连接关系

来自分类Dev

SQLAlchemy会话和连接关系

来自分类Dev

无法连接连接关闭连接后,无法进行任何操作。Tomcat 7中的错误

来自分类Dev

如何在mysql主表的单个查询中连接关系表中的值

来自分类Dev

无法在春季启动中解析JSON

来自分类Dev

连接表与cakephp中的主表没有直接关系

来自分类Dev

Prolog:从间接关系中消除循环

来自分类Dev

Laravel中的链接关系问题

来自分类Dev

调试合金中的链接关系声明

来自分类Dev

Prolog:从间接关系中消除循环

来自分类Dev

递归SQL自连接

来自分类Dev

SQLAlchemy 使用连接关系查询两次

来自分类Dev

连接关系给出模型未找到错误

来自分类Dev

HttpClient 中的意外连接关闭

来自分类Dev

通过使用JBOSS 6的JTA Transaction Manager使用JPA存储库进行春季启动

来自分类Dev

春季启动JPA中的带有序列的JPA复合键

来自分类Dev

春季启动依赖关系和安全修复

来自分类Dev

春季启动依赖关系和安全修复

来自分类Dev

使用 JSON 和 Hibernate JPA 进行无限递归

来自分类Dev

春季JPA-删除一对多关系中的子级

来自分类Dev

JSON返回嵌套数组来代替对象[春季启动+ JPA + MYSQL + REST]

来自分类Dev

配置的RabbitMQ连接工厂在春季启动AMQP

来自分类Dev

Laravel 从表单创建或更新模型链接关系中的许多

来自分类Dev

春季启动JPA事务处理测试中 - 不扔上插入键冲突异常

来自分类Dev

在不使用xml的春季启动中连接到mysql数据源

Related 相关文章

  1. 1

    EF CodeFirst AddColumn到自连接关系

  2. 2

    查询仅连接关系中的最后一行

  3. 3

    创建具有自联接关系的资产时出现递归错误

  4. 4

    春季启动-使用JPA在关系数据库中存储和检索数据时出现UnsatisfiedDependencyException

  5. 5

    用Ruby Object Mapper连接关系

  6. 6

    SQLAlchemy会话和连接关系

  7. 7

    无法连接连接关闭连接后,无法进行任何操作。Tomcat 7中的错误

  8. 8

    如何在mysql主表的单个查询中连接关系表中的值

  9. 9

    无法在春季启动中解析JSON

  10. 10

    连接表与cakephp中的主表没有直接关系

  11. 11

    Prolog:从间接关系中消除循环

  12. 12

    Laravel中的链接关系问题

  13. 13

    调试合金中的链接关系声明

  14. 14

    Prolog:从间接关系中消除循环

  15. 15

    递归SQL自连接

  16. 16

    SQLAlchemy 使用连接关系查询两次

  17. 17

    连接关系给出模型未找到错误

  18. 18

    HttpClient 中的意外连接关闭

  19. 19

    通过使用JBOSS 6的JTA Transaction Manager使用JPA存储库进行春季启动

  20. 20

    春季启动JPA中的带有序列的JPA复合键

  21. 21

    春季启动依赖关系和安全修复

  22. 22

    春季启动依赖关系和安全修复

  23. 23

    使用 JSON 和 Hibernate JPA 进行无限递归

  24. 24

    春季JPA-删除一对多关系中的子级

  25. 25

    JSON返回嵌套数组来代替对象[春季启动+ JPA + MYSQL + REST]

  26. 26

    配置的RabbitMQ连接工厂在春季启动AMQP

  27. 27

    Laravel 从表单创建或更新模型链接关系中的许多

  28. 28

    春季启动JPA事务处理测试中 - 不扔上插入键冲突异常

  29. 29

    在不使用xml的春季启动中连接到mysql数据源

热门标签

归档