Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring 使用投影检索子集合的特定字段 class Post{ @身份证 长id; 字符串标题; @ManyToMany(fetch=FetchType.LAZY, 级联={ cascade type.PERSIST, CascadeType.MERGE, }) @JoinTable(name=“post_标签”, joinColumns={@JoinColumn(name=“post_id”)}, inverseJoinColumns={@JoinColumn(name=“tag_id”)}) 设置标签; //建造师 //吸气剂 //二传手 } 类标签{ @身份证 长id 字符串名; //getter、setter、构造函数 } 界面后投影{ 长getId(); 字符串getTitle(); @值(“#{target.tags.size()}”) int getNumberOfTags(); }_Spring_Hibernate_Spring Boot_Spring Data Jpa_Projection - Fatal编程技术网

Spring 使用投影检索子集合的特定字段 class Post{ @身份证 长id; 字符串标题; @ManyToMany(fetch=FetchType.LAZY, 级联={ cascade type.PERSIST, CascadeType.MERGE, }) @JoinTable(name=“post_标签”, joinColumns={@JoinColumn(name=“post_id”)}, inverseJoinColumns={@JoinColumn(name=“tag_id”)}) 设置标签; //建造师 //吸气剂 //二传手 } 类标签{ @身份证 长id 字符串名; //getter、setter、构造函数 } 界面后投影{ 长getId(); 字符串getTitle(); @值(“#{target.tags.size()}”) int getNumberOfTags(); }

Spring 使用投影检索子集合的特定字段 class Post{ @身份证 长id; 字符串标题; @ManyToMany(fetch=FetchType.LAZY, 级联={ cascade type.PERSIST, CascadeType.MERGE, }) @JoinTable(name=“post_标签”, joinColumns={@JoinColumn(name=“post_id”)}, inverseJoinColumns={@JoinColumn(name=“tag_id”)}) 设置标签; //建造师 //吸气剂 //二传手 } 类标签{ @身份证 长id 字符串名; //getter、setter、构造函数 } 界面后投影{ 长getId(); 字符串getTitle(); @值(“#{target.tags.size()}”) int getNumberOfTags(); },spring,hibernate,spring-boot,spring-data-jpa,projection,Spring,Hibernate,Spring Boot,Spring Data Jpa,Projection,在PostProjection中,我想检索属于此帖子的每个标签的名称。我可以得到一个特定帖子的标签数量,但不能得到标签的名称。我不想要标签id。我尝试过这样做: class Post { @Id Long id; String title; @ManyToMany(fetch = FetchType.LAZY, cascade = { CascadeType.PERSIST,

在PostProjection中,我想检索属于此帖子的每个标签的名称。我可以得到一个特定帖子的标签数量,但不能得到标签的名称。我不想要标签id。我尝试过这样做:

   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();

}
@Value(“#{target.tags.name}”)

我的建议是除非你真的需要,否则不要使用。记住,根据,当使用开放投影时,Spring不会优化您的查询

在这种情况下,Spring数据无法应用查询执行优化, 因为SpEL表达式可以使用聚合的任何属性 根

上面的解决方案()将从您的投影中获得一组标记名

 @Value("#{target.tags.name}")
         Set<String getTagsNanes();
导入静态java.util.stream.Collectors.toSet;
公共接口后投影{
字符串getTitle();
设置getTags();
默认设置getTagsNames(){
返回getTags().stream().map(Tag::getName).collect(toSet());
}
}

我的建议是避免使用,除非你真的需要。记住,根据,当使用开放投影时,Spring不会优化您的查询

在这种情况下,Spring数据无法应用查询执行优化, 因为SpEL表达式可以使用聚合的任何属性 根

上面的解决方案()将从您的投影中获得一组标记名

 @Value("#{target.tags.name}")
         Set<String getTagsNanes();
导入静态java.util.stream.Collectors.toSet;
公共接口后投影{
字符串getTitle();
设置getTags();
默认设置getTagsNames(){
返回getTags().stream().map(Tag::getName).collect(toSet());
}
}