【问题标题】:JPA JsonManagedReference with lombokJPA JsonManagedReference 与 lombok
【发布时间】:2021-07-08 15:54:19
【问题描述】:

这是一个两部分的问题:

我看到一些教程说您应该将 JsonManagedReference / JsonBackReference 添加到 getter 而不是实际属性,如下所示:

  public class Post {
    @ManyToOne
    @JoinColumn(name = "user_id")
    private User user;

    @JsonBackReference
    public getUser() {
      return user;
    }
  }

  public class User {
    @OneToMany(mappedBy = "user")
    private List<Post> posts;

    @JsonManagedReference
    public List<Post> getPosts() {
      return posts;
    }
  }

有人可以确认吗?如果为真,这会引出我的第二个问题,如果使用 lombok,我是否需要为这些属性创建自定义 getter 并添加注释,或者是否可以将其添加到实际属性中,并且 lombok 足够聪明,可以自动将它们添加到 getter生成的吸气剂?

【问题讨论】:

    标签: jpa spring-data-jpa lombok


    【解决方案1】:

    没有,也没有。如果某些教程建议将注释放置到 getter 中,那么该教程中也可能解释了原因。

    但是,如果有真正的理由使用@GetterLombok 执行此操作,则 Lombok 提供了一种添加这些注释的方法,但在某种意义上不是非常灵活,那么您需要编写“几乎与编写 getter 一样多的代码”你自己。它是属性onMethod(还有onConstructor等)

    看看这个简单的示例类:

    @Getter(onMethod = @__(@Deprecated))
    public class LombokExample {
        @JsonBackReference
        private User userProperty;
    
        @Getter(onMethod = @__(@JsonBackReference))
        private User userGetter;
    }
    

    名为 delombok 的工具会显示生成的代码。 cmets中的解释:

    public class LombokExample {
        @JsonBackReference
        private User userProperty;
        private User userGetter;
    
        @Deprecated // class level getter onMethod adds this
                    // but not @JsonBackReference
        @java.lang.SuppressWarnings("all")
        public User getUserProperty() {
            return this.userProperty;
        }
    
        @JsonBackReference // Method level getter onMethod adds this
                           // and since overridden the @Deprecated 
                           // is not added
        @java.lang.SuppressWarnings("all")
        public User getUserGetter() {
            return this.userGetter;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2015-09-27
      • 1970-01-01
      • 2016-11-07
      • 2018-02-14
      • 1970-01-01
      • 1970-01-01
      • 2016-03-18
      • 2021-06-18
      • 2021-07-26
      相关资源
      最近更新 更多