【问题标题】:How to query @JoinTable in Spring Data Jpa?Spring Data Jpa中如何查询@JoinTable?
【发布时间】:2017-04-25 14:57:25
【问题描述】:

我在 BookRepository 中使用了类型过滤器,但它不起作用。

Book.java

@Entity
public class Book {
    private Long id;
    private String name;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinTable(
            name = "book_type",
            joinColumns = @JoinColumn(name = "book_id"),
            inverseJoinColumns = @JoinColumn(name = "type_id")
    )
    private Type type;

    // getter and setter
}

Type.java

@Entity
public class Type {
    private Long id;
    private String name;

    @OneToMany(fetch = FetchType.LAZY)
    @JoinTable(
            name = "book_type",
            joinColumns = @JoinColumn(name = "type_id"),
            inverseJoinColumns = @JoinColumn(name = "book_id")
    )
    private Collection<Book> books;

    // getter and setter
}

BookRepository.java

@Repository
public interface BookRepository extends JpaRepository<Book, Long> {
    Page<Book> findBookListByType(Type type, Pageable pageable);
}

不是 Spring Data Jpa 不支持这个功能。

【问题讨论】:

  • 为什么不定义你想要执行的查询?什么需要返回什么约束?不知道为什么人们会想到一些连接表......你查询实体和关系,这不是 SQL 土地

标签: hibernate spring-data spring-data-jpa jpql


【解决方案1】:

试试这个

@Repository
public interface BookRepository extends JpaRepository<Book, Long> {

    @Query(value="Select b from Book b where b.type = :type")
    Page<Book> findAllByType(@Param("type") Type type, Pageable pageable);

}

【讨论】:

  • 我猜你想要所有特定类型的书!??
  • 我有不同的书,它们是不同的类型。现在无论我选择哪种类型,它都会显示所有书籍。
【解决方案2】:

由于您只有一个 @OneToMany 关联,您可以将 FetchType 更改为 EAGER。

【讨论】:

    猜你喜欢
    • 2021-02-10
    • 1970-01-01
    • 1970-01-01
    • 2019-02-28
    • 2015-08-04
    • 2018-09-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多