【问题标题】:Lombok with hibernate龙目岛与休眠
【发布时间】:2011-06-19 11:56:48
【问题描述】:

这可能吗?没有看到太多关于它的讨论。

【问题讨论】:

    标签: java hibernate code-generation lombok


    【解决方案1】:

    当然!根据我的经验,它非常有效。这是一个示例实体:

    @Entity
    @Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
    public class PingerEntity {
        // ID
        @Id
        @Getter
        @Setter
        @GeneratedValue(strategy = GenerationType.AUTO)
        private Long id;
    
    
        // USER
        @Getter
        @Setter
        @ManyToOne(fetch = FetchType.LAZY, optional = false)
        private UserEntity user;
    
    
        // URL
        @Getter
        @Setter
        @Basic(optional = false)
        private String url;
    
    
        /**
         * The number of seconds between checks
         */
        @Getter
        @Setter
        @Basic(optional = false)
        private int frequency; 
    
    
        @Getter
        @Setter
        @Basic(optional = false)
        @Enumerated(EnumType.STRING)
        public MonitorType monitorType;
    }
    

    【讨论】:

    • 如果你使用Data,你不必在每个字段上都放置Getter和Setter。您可能还想指定 EqualsAndHashcode(of={"id"})
    • @RoelSpilker 是的,但要小心具有 OneToMany 和 ManyToOne 的实体,因为 lombok 的 ToString 会造成无限循环。
    • 这就是我要找的那个,我对这些实体之一有一个无限循环,它导致了 stackoverflowerror。感谢您的提示!
    • @qwertzguy :请您进一步详细说明您的上述回复。我错过了你的意思。
    • @ecdhe 基本上有一个实体链接到另一个实体,它本身链接回第一个实体。然后,他们将相互反复调用 toString。
    【解决方案2】:

    您也可以将它与 @Data 一起使用(它有效!)

    @Entity
    @Data
    public class Customer {
    
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        private long id;
        private String firstName;
        private String lastName;
    
    }
    

    【讨论】:

    • 我在使用 @Data 注释和休眠时遇到了问题。第一个问题是使用 hashCode() 生成的方法,休眠只是未能创建实体。另一个带有 toString() 方法的模型可以包含列表或集合。到目前为止,#Setter #Getter 非常好。 #ToString 仅当模型仅包含纯数据字段时
    • 事实上没有!本文详细解释了原因jpa-buddy.com/blog/lombok-and-jpa-what-may-go-wrong
    【解决方案3】:

    我从未尝试过使用 Hibernate 的 Lombok,但我不明白为什么它不应该工作。 另外,请看这里:http://groups.google.com/group/project-lombok/browse_thread/thread/294bd52d9d8695df/7bc6b0f343831af1?lnk=gst&q=hibernate#7bc6b0f343831af1

    另外,Lombok project release notes 明确提及 Hibernate。

    【讨论】:

      【解决方案4】:

      一个简单的例子; Library.java:

      @Data
      @NoArgsConstructor // JPA
      @Entity
      @Table(name = "libraries")
      public class Library {
      
        @Id
        @GeneratedValue
        private Long id;
      
        @OneToMany(cascade = CascadeType.ALL)
        @EqualsAndHashCode.Exclude
        // This will be included in the json
        private List<Book> books = new ArrayList<>();
      
        @JsonIgnore
        public void addBook(Book book) {
          books.add(book);
          book.setLibrary(this);
        }
      }
      

      还有Book.java:

      @Data
      @NoArgsConstructor // JPA
      @Entity
      @Table(name = "books")
      public class Book {
      
        @Id
        @GeneratedValue
        private Long id;
      
        @NotBlank
        private String title;
      
        @ManyToOne
        @JoinColumn(name = "library_id") // Owning side of the relationship
        @EqualsAndHashCode.Exclude
        @JsonIgnore // Avoid infinite loops
        private Library library;
      }
      

      【讨论】:

        猜你喜欢
        • 2021-03-27
        • 1970-01-01
        • 2014-12-06
        • 1970-01-01
        • 2018-03-29
        • 1970-01-01
        • 2021-10-02
        • 2015-10-18
        • 1970-01-01
        相关资源
        最近更新 更多