我有以下 JPA 实体
@Data
@Builder
public class Post {
@Id
@GeneratedValue
UUID id;
@OneToMany
Set<PostTags> tags;
String content;
}
@Data
public class PostTag {
@Id
@GeneratedValue
UUID id;
@OneToOne
Post post;
String tag;
}
使用 lombok @Builder 我希望能够执行以下操作
Post post = Post.builder()
.tags("hello", "world")
.content("Hello world")
.build();
我假设我需要一个自定义生成器
public static class PostBuilder {
private Set<String> myTags = new HashSet<>();
public PostBuilder tags(String... tags) {
myTags.addAll(Arrays.asList(tags));
return this;
}
}
来自documentation它出现在那里我可以使用的 ObtainVia
注释,但我不确定如何绕过它(文档中没有示例),特别是因为我只希望 myTags
特定于构建器的东西,而不是在主类本身上公开。
最佳答案
ObtainVia
仅适用于 toBuilder
,因此在这种情况下不会有太大帮助。
我建议采用以下方法。
首先,在PostTag
中添加一个工厂方法,例如创建标签(字符串)
。此方法仅在它创建的实例中设置 tag
并将其他所有内容保留为 null
。将其静态导入到要使用 PostBuilder
的类中。
接下来,在标签
上使用@Singular
。然后你可以这样写:
Post post = Post.builder()
.tag(createTag("hello"))
.tag(createTag("world"))
.content("Hello world")
.build();
最后,自定义 build()
方法,使其首先创建 Post
实例(就像未自定义的 build()
方法一样)然后将这个新创建的 Post
实例设置为所有 PostTag
实例中的 post
。
查看 delombok
ed 代码,确保在自定义构建器时使用正确的构建器类和方法 header 。
关于java - 如何使用 lombok @Builder 来存储不同的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56716242/