我有一个类 BaseEntity:
和一个扩展类:
我正在尝试使用构建器构建播种机:
我希望 Lombok 在带有基类 baseEntity 的 BreedEntity 中创建一个构造函数。
我阅读了文档,当我删除 @entity 注释 SuperBuilder Docs时它工作得很好
有人可以更详细地解释为什么会这样吗?
我有一个类 BaseEntity:
和一个扩展类:
我正在尝试使用构建器构建播种机:
我希望 Lombok 在带有基类 baseEntity 的 BreedEntity 中创建一个构造函数。
我阅读了文档,当我删除 @entity 注释 SuperBuilder Docs时它工作得很好
有人可以更详细地解释为什么会这样吗?
试试这个方法
@Getter
@MappedSuperclass
@SuperBuilder(toBuilder = true)
public abstract class BaseEntity
和
@Getter
@Entity
@Table(...)
@NoArgsConstructor
@SuperBuilder(toBuilder = true)
public class BreedEntity extends BaseEntity
它适用于我的情况。如果由于某种原因它对您不起作用。您可以调查这些示例并了解如何解决您的问题。
正如错误所说,Entity 必须有一个公共的无参数构造函数。
Spring 库就是这样设计的。假设您进行查询BreedRepo.findById(...)
,发生以下事情
BreedEntity
。(为此,您需要 no arg 构造函数)BreedEntiry
然后使用setter方法设置所有注册的cloumns 。(您还需要为每个设置设置方法@Column
)结论: Lombok builder 与 Spring JPA 不兼容。@Data
改为使用
您将不得不以看起来不太酷的方式执行此操作,new
然后setX
,setY
...
我建议为 Hibernate 添加一个包私有构造函数,然后您几乎可以实现所需的功能。
@NoArgsConstructor(access = AccessLevel.PACKAGE)
BreedEntity