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。我尝试这样做:
@Value("#{target.tags.name}")
Set<String getTagsNanes();
但这不起作用。 如何使用投影检索每个标签所属的名称输入到特定帖子?预先谢谢你!
答案 0 :(得分:0)
我的建议是避免使用Open Projections除非你真的很需要那。请记住,根据docs,使用Open Projections时,Spring不会优化您的查询。
弹簧中的数据不能在这种情况下应用的查询执行优化, 因为SpEL表达式可以使用聚合的任何属性 根。
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());
}
}