class Post {
@Id
Long id;
String title;
@ManyToMany(fetch = FetchType.LAZY,
cascade = {
CascadeType.PERSIST,
CascadeType.MERGE,
})
@JoinTable(name = "post_tags",
joinColumns = { @JoinColumn(name = "post_id") },
inverseJoinColumns = { @JoinColumn(name = "tag_id") })
Set<Tag> tags;
// constructor
// getters
// setters
}
class Tag{
@Id
Long id
String name;
// getters, setter, constructor
}
interface PostProjection{
Long getId();
String getTitle();
@Value("#{target.tags.size()}")
int getNumberOfTags();
}
在PostProjection我想以检索名称的每个标签都属于这一职务。我能够得到的标签数量为特定的职位,但没有标记的名称。我不想id.I试着这样做标签:
@Value("#{target.tags.name}")
Set<String getTagsNanes();
但是,这并不工作。如何可以检索每一个标签的名称,是属于输入到使用投影特定的帖子?先感谢您!
我的建议是避免使用Open Projections,除非你真的很需要那。请记住,有docs根据,采用开放式的预测时,Spring将不会优化您的查询。
春天的数据不能适用于这种情况的查询执行优化,因为规划环境地政司表示可以使用聚合根的任何属性。
上述(Java 8)解决方案将获取标记名称的Set从您的投影。
import static java.util.stream.Collectors.toSet;
public interface PostProjection {
String getTitle();
Set<Tag> getTags();
default Set<String> getTagsNames() {
return getTags().stream().map(Tag::getName).collect(toSet());
}
}