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

Spring Boot:当实体具有双向引用(ManyToMany、FetchType.LAZY)时,请求-应答中的“循环”

杨乐
2023-03-14

很好的一天,

我正在研究Spring靴。这是我的项目https://github.com/Alex1182-St/java-spring-jpa-postgresql.git

我有两个实体:

AppUserEntity-https://github.com/Alex1182-St/java-spring-jpa-postgresql/blob/master/src/main/java/com/java/javaspringjpapostgresql/entities/AppUserEntity.java

和RoleEntity-https://github.com/Alex1182-St/java-spring-jpa-postgresql/blob/master/src/main/java/com/java/javaspringjpapostgresql/entities/RoleEntity.java

这些实体具有双向引用(ManyToMany、FetchType.LAZY)。

我的问题是,当我的方法(AppUserController中的方法appUserById2WithPost)返回一个实体而不是DTO时,我会在答案中收到一个“循环”。这是这只小家伙的样子-

    "id": "e68e915f-e684-4b95-820a-a670a7bea677",
    "appUserLogin": "Login9",
    "appUserPassword": "$2a$10$ENyk.YDPLn4zsq1JL6Nol.97kwIlZVAK7pCei8I9i6LhzMj52UAN.",
    "roles": [
        {
            "id": "7a8abe8d-ab02-4e00-a463-a7d23df05778",
            "name": "USER",
            "appUsers": [
                {
                    "id": "e68e915f-e684-4b95-820a-a670a7bea677",
                    "appUserLogin": "Login9",
                    "appUserPassword": "$2a$10$ENyk.YDPLn4zsq1JL6Nol.97kwIlZVAK7pCei8I9i6LhzMj52UAN.",
                    "roles": [
                        {
                            "id": "7a8abe8d-ab02-4e00-a463-a7d23df05778",
                            "name": "USER",
                            "appUsers": [
                                {
                                    "id": "e68e915f-e684-4b95-820a-a670a7bea677",
                                    "appUserLogin": "Login9",
                                    "appUserPassword": "$2a$10$ENyk.YDPLn4zsq1JL6Nol.97kwIlZVAK7pCei8I9i6LhzMj52UAN.",
                                    "roles": [
                                        {
                                            "id": "7a8abe8d-ab02-4e00-a463-a7d23df05778",
                                            "name": "USER",
                                            "appUsers": [
                                                {
                                                    "id": "e68e915f-e684-4b95-820a-a670a7bea677",
                                                    "appUserLogin": "Login9",
                                                    "appUserPassword": "$2a$10$ENyk.YDPLn4zsq1JL6Nol.97kwIlZVAK7pCei8I9i6LhzMj52UAN.",
                                                    "roles": [
                                                        { AND SO ON...

在想法的控制台我有这样的错误-失败,而试图解决异常[org.springframework.http.converter.HttpMessageNotWritableExcture]

控制器与方法-https://github.com/Alex1182-St/java-spring-jpa-postgresql/blob/master/src/main/java/com/java/javaspringjpapostgresql/controllers/AppUserController.java

当然,我可以通过返回DTO(如在方法appUserByIdBackPost中)或在实体中使用注释@JsonIdtyInfo来解决它。

但我担心这个项目仍会有错误。我想解决它。但是我找不到它的原因。有人能帮我吗?或者这种行为是正常的?

先谢谢你。

共有1个答案

姚煜
2023-03-14

我认为这种行为对于双向关系是正常的,用JSON注释来处理它是很好的(虽然对于@ JSONISTIGITIONFION不是必需的:您可以考虑JSONNECT或JSONVALL)。

另一个问题是,如果你需要双向关系(角色上的多对多真的有必要吗?)或者即使角色应该是一个实体。

 类似资料:
  • 我有三个实体,EntityA、EntityB和EntityC,以这样的方式 是否有任何方法或任何库来生成正确的响应bean? 注意:使用lazy不是一个选项,因为在其他一些方法中,我希望获得相关的实体。

  • 问题内容: 我有两个实体: 我知道和。如果我要序列化的实例,那么它们很好。 但是我还需要传输的实例,并且我想填充该字段。 换一种说法: 在序列化时应该有,但是其父字段可能为空(可以通过使用json参考注释解决)。 在序列化时,它应该带有它们(但不必填充。) 有没有一种使用标准Jackson功能来解决它​​的方法? 即跳过已经序列化的实体的序列化,而不是标记符合或不符合序列化条件的字段。 问题答案:

  • 我有这些实体: 用户 角色 权限 一个用户有很多角色,一个角色有很多权限。 null

  • 问题内容: 我有两个以下列方式注释的实体类 如果我存储类“ B”的实例,则关系将存储在数据库中,并且类“ A”中的吸气剂将返回B的正确子集。但是,如果我对“ A”中的B列表进行了更改,更改是否不存储在数据库中? 我的问题是,我该如何做到使任一类的更改都“级联”到另一类? 编辑:我尝试过删除mapedBy参数和定义JoinTable(和列)的不同变体,但我一直找不到正确的组合。 问题答案: 最短的答

  • 问题内容: 我的实体中存在双向多对多关系。请参阅以下示例: 当我尝试将其序列化为JSON时,出现以下异常: “ java.lang.IllegalArgumentException:无法处理托管/反向引用’COLLABORATION_TAG’:反向引用类型(java.util.Set)与托管类型(foo.Collaboration)不兼容。 实际上,我知道这很有意义,因为javadoc明确声明您不

  • 我在我的实体中有一种双向的多对多关系。请参见下面的示例: 当我尝试将其序列化为JSON时,我得到了以下异常:' “java.lang.IllegalArgumentException:无法处理托管/反向引用'COLLABORATION_TAG':反向引用类型(java.util.Set)与托管类型(foo.COLLABORATION)不兼容。”。 实际上,我知道这是有道理的,因为javadoc明确