龙目岛与休眠

Posted

技术标签:

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

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

【问题讨论】:

【参考方案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 会造成无限循环。 这就是我要找的那个,我对这些实体之一有一个无限循环,它导致了 ***error。感谢您的提示! @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;

【讨论】:

以上是关于龙目岛与休眠的主要内容,如果未能解决你的问题,请参考以下文章

Java多线程程序休眠暂停与停止

本机存储过程与休眠

休眠 openSession() 与 getCurrentSession()

将 narayana 事务管理器与休眠集成

休眠与 iBATIS [关闭]

与 HSQLDB 的休眠连接