Spring JPA-获取所有子元素

时间:2018-07-16 21:33:08

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

我有以下POJO's

过滤器---->过滤器组件

@Entity
public class Filter {

            @Id
            @GeneratedValue(strategy = GenerationType.AUTO)
            private int id;
            private String name;
    //Setters and getters are not shown 

我有以下子课程

@Entity    
public class FilterComponents {
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        private int id;
        private int component_id;
        private int component_type;

        @ManyToOne
        @JoinColumn(name = "filter_id")
        private Filter filter;
//Setters and getters are not shown

我创建了一个存储库来查询过滤器

public interface FilterRepository extends JpaRepository <Filter, Long> {}

我正在调用findAll()函数来获取所有过滤器。该功能运行良好;但是,它仅返回每个过滤器的名称和ID。

enter image description here

有没有办法返回相应的过滤器组件?我以为我可以编写联接查询,但是我感觉有一种更简洁的方法!

谢谢

2 个答案:

答案 0 :(得分:0)

您可能缺少的是filterComponents的{​​{1}}字段,例如

Filter

您可以根据需要在此处定义渴望或懒惰的抓取

答案 1 :(得分:0)

您的Filter实体与FilterComponent实体没有任何显式关联。在这种情况下,您将需要再次请求以选择具有给定过滤器ID的所有过滤器组件。

另一方面,您可以在Filter实体中声明以下字段:

@OneToMany(mappedBy = "filter", fetch = FetchType.EAGER)
private List<FilterComponent> filterComponents;

并始终热切地加载过滤器组件。

如果急切加载不适合您,则可以对left join fetch使用自定义查询:

select distinct f from Filter f left join fetch f.filterComponents c