Вы можете использовать @Accessors
для того, что вы спрашиваете:
Post
@Data
@Accessors(chain = true)
public class Post {
@Id
@GeneratedValue
private UUID id;
@OneToMany
private Set<PostTags> tags;
private String content;
public Post tags(String... tags) {
Arrays.stream(tags)
.map(tag -> PostTags.builder().tag(tag).build())
.forEach(this.tags::add);
return this;
}
}
PostTags
@Data
@Builder
public class PostTags {
@Id
@GeneratedValue
private UUID id;
@OneToOne
private Post post;
private String tag;
}
Когда вы используете @Accessors(chain = true)
, сеттеры вернут ссылку this
вместо void
, и ваш код будет действовать следующим образом:
Post post = new Post().setId(id).tags("aaa", "bbb");
Есливы хотите, чтобы ваш код был больше похож на компоновщик, а затем добавьте значение fluent
к аннотации: @Accessors(chain = true, fluent = true)
Это удалит set<Something>
из сеттеров и просто использует имя полей, а затемваш код будет выглядеть так:
Post post = new Post().id(id).content("hello").tags("aaa", "bbb");