2

我有一个类 BaseEntity:

在此处输入图像描述

和一个扩展类:

在此处输入图像描述

我正在尝试使用构建器构建播种机:

在此处输入图像描述

我希望 Lombok 在带有基类 baseEntity 的 BreedEntity 中创建一个构造函数。

我阅读了文档,当我删除 @entity 注释 SuperBuilder Docs时它工作得很好

有人可以更详细地解释为什么会这样吗?

4

3 回答 3

2

试试这个方法

@Getter
@MappedSuperclass
@SuperBuilder(toBuilder = true)
public abstract class BaseEntity

@Getter
@Entity
@Table(...)
@NoArgsConstructor
@SuperBuilder(toBuilder = true)
public class BreedEntity extends BaseEntity

它适用于我的情况。如果由于某种原因它对您不起作用。您可以调查这些示例并了解如何解决您的问题。

于 2020-09-06T15:02:42.210 回答
1

正如错误所说,Entity 必须有一个公共的无参数构造函数。

Spring 库就是这样设计的。假设您进行查询BreedRepo.findById(...),发生以下事情

  • Hibernate 访问数据库驱动程序并获取查询结果。
  • 创建了一个新的类实例BreedEntity。(为此,您需要 no arg 构造函数)
  • BreedEntiry然后使用setter方法设置所有注册的cloumns 。(您还需要为每个设置设置方法@Column

结论: Lombok builder 与 Spring JPA 不兼容。@Data改为使用

您将不得不以看起来不太酷的方式执行此操作,new然后setXsetY...

于 2020-04-06T15:49:08.190 回答
1

我建议为 Hibernate 添加一个包私有构造函数,然后您几乎可以实现所需的功能。

@NoArgsConstructor(access = AccessLevel.PACKAGE)
BreedEntity
于 2020-04-06T15:52:37.793 回答