首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Lombok @Builder和JPA默认构造函数

Lombok @Builder和JPA默认构造函数
EN

Stack Overflow用户
提问于 2015-12-12 23:44:09
回答 5查看 78.1K关注 0票数 88

我将Lombok项目与Spring Data JPA结合使用。有没有办法将Lombok @Builder与JPA默认构造函数连接起来?

代码:

代码语言:javascript
复制
@Entity 
@Builder
class Person {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
}

据我所知,JPA需要默认的构造器,它被@Builder注解所覆盖。有什么解决方法吗?

这段代码给出了错误:org.hibernate.InstantiationException: No default constructor for entity: : app.domain.model.Person

EN

回答 5

Stack Overflow用户

发布于 2016-02-24 20:28:59

您也可以在类定义中结合使用@Data @Builder @NoArgsConstructor @AllArgsConstructor来显式地解决这个问题。

票数 82
EN

Stack Overflow用户

发布于 2018-08-28 07:45:08

似乎注释顺序在这里很重要,使用相同的注释,但顺序不同,你可以让代码工作,也可以不工作。

以下是一个不起作用的示例:

代码语言:javascript
复制
@AllArgsConstructor
@Builder
@Data
@Entity
@EqualsAndHashCode
@NoArgsConstructor
@RequiredArgsConstructor
@Table
@ToString
public class Person implements Serializable {
  private String name;
}

这是一个有效的例子:

代码语言:javascript
复制
@Builder
@Data
@Entity
@EqualsAndHashCode
@AllArgsConstructor
@NoArgsConstructor
@RequiredArgsConstructor
@Table
@ToString
public class Person implements Serializable {
  private String name;
}

所以一定要把@Builder注释放在最上面的位置,在我的例子中,我遇到了这个错误,因为我想按字母顺序对注释进行排序。

票数 11
EN

Stack Overflow用户

发布于 2019-07-19 20:14:02

使用@NoArgsConstructor@AllArgsContructor将有助于解决具有@Builder的默认构造函数的问题。

e.g

代码语言:javascript
复制
@Entity 
@Builder
@NoArgsConstructor
@AllArgsContructor
class Person {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
}

这是因为@Builder需要所有参数构造函数,并且只指定默认构造函数会导致问题。

以下是nore的解释:https://github.com/rzwitserloot/lombok/issues/1389#issuecomment-369404719

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34241718

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档