【问题标题】:Query method in Spring Data JPA for relation @ManyToOneSpring Data JPA中关系@ManyToOne的查询方法
【发布时间】:2021-03-16 20:02:30
【问题描述】:

错误:

org.springframework.beans.factory.BeanCreationException:创建名为“postRepository”的bean时出错:FactoryBean在创建对象时抛出异常;嵌套异常是 java.lang.IllegalArgumentException: Failed to create query for method public abstract org.springframework.data.domain.Page com.example.forumProject.Authentication.Repository.PostRepository.findByTags(java.util.List,org.springframework. data.domain.Pageable)!标签上的运算符 SIMPLE_PROPERTY 需要标量参数,在方法 public abstract org.springframework.data.domain.Page com.example.forumProject.Authentication.Repository.PostRepository.findByTags(java.util.List,org 中找到接口 java.util.List .springframework.data.domain.Pageable)。

这是定义的 Post 类:

@EqualsAndHashCode(callSuper = true)
@Entity
@Data
@Table(name = "posts", uniqueConstraints = { @UniqueConstraint(columnNames = { "title" }) })
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id")
public class Post extends UserDateAudit {
    ... 
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "user_id")
    private User user;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "category_id")
    private Category category;

    @JsonIgnore
    @OneToMany(mappedBy = "post", cascade = CascadeType.ALL, orphanRemoval = true)
    private List<Comment> comments;

    @ManyToMany(fetch = FetchType.LAZY)
    @JoinTable(name = "post_tag", joinColumns = @JoinColumn(name = "post_id", referencedColumnName = "id"), inverseJoinColumns = @JoinColumn(name = "tag_id", referencedColumnName = "id"))
    private List<Tag> tags;

存储库:

@Repository
public interface PostRepository extends JpaRepository<Post, Long> {
    Page<Post> findByCreatedBy(Long userId, Pageable pageable);

    Page<Post> findByCategory(Long categoryId, Pageable pageable);

    Page<Post> findByTags(List<Tag> tags, Pageable pageable);

    Long countByCreatedBy(Long userId);
}

【问题讨论】:

  • 您应该将您的方法名称 findByTags 重命名(修复)为 findByTagsIsIn

标签: java spring-boot jpa


【解决方案1】:

如果我们想要带有 In 子句的 Spring Data JPA 规范的动态查询

我们需要在方法名中使用关键字In,如下所示。

Page<Post> findByTagsIn(List<Tag> tags, Pageable pageable);

您可以在方法名称here中找到所有支持的关键字

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-24
    • 2018-09-04
    • 2023-01-17
    • 1970-01-01
    • 2020-01-14
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    相关资源
    最近更新 更多