首页 > 解决方案 > 无法获取任何字段

问题描述

我使用spring boot,带有jpa和hibernate

@Entity
@IdClass(SamplesPK.class)
public class Samples{
    ..
    @Id
    @ManyToOne
    @JoinColumns({
        @JoinColumn(name = "sampling_id", referencedColumnName = "id"),
        @JoinColumn(name = "sampling_year", referencedColumnName = "year")})
    private Samplings sampling;
    ...
}

@Entity
@IdClass(SamplingsPK.class)
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
public class Samplings {
    @OneToOne
    private Products product;
}

@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
public abstract class Products{
    ...
    @ManyToOne(fetch = FetchType.LAZY)
    private ProductTypes productType;
}

@Entity
@DiscriminatorValue("TraditionalProducts")
public class TraditionalProducts extends Products {
    ...
}

@Entity
@DiscriminatorValue("GranulateProducts")
public class GranulateProducts extends Products  {
     @ManyToMany(mappedBy="granulateProducts")
    private Set<Suppliers> suppliers = new HashSet<>();
}

在存储库中,我写了这个查询

 @Query(value = "select s from Samples s Join Fetch s.sampling sp Join Fetch sp.machine m Join Fetch sp.product p Join Fetch p.productType")
 public Page<Samples> findAllFullSample(Pageable pageable);

我收到这条消息

引起:java.lang.IllegalArgumentException:org.hibernate.QueryException:查询指定连接提取,但选择列表中不存在提取关联的所有者 [FromElement{explicit,not a collection join,fetch join,fetch non-惰性属性,classAlias=sp,role=com.lcm.model.Samples.sampling,tableName=samplings,tableAlias=samplings1_,origin=samples samples0_,columns={samples0_.sampling_id samples0_.sampling_year ,className=com.lcm.model。 Samplings}}] [select count(s) from com.lcm.model.Samples s Inner Join Fetch s.sampling sp Inner Join Fetch sp.machine m Inner Join Fetch sp.product p Inner Join Fetch p.productType]

引起:org.hibernate.QueryException:查询指定连接提取,但选择列表中不存在提取关联的所有者 [FromElement{explicit,not a collection join,fetch join,fetch non-lazy properties,classAlias=sp ,role=com.lcm.model.Samples.sampling,tableName=samplings,tableAlias=samplings1_,origin=samples samples0_,columns={samples0_.sampling_id samples0_.sampling_year ,className=com.lcm.model.Samplings}}] [选择count(s) from com.lcm.model.Samples s Inner Join Fetch s.sampling sp Inner Join Fetch sp.machine m Inner Join Fetch sp.product p Inner Join Fetch p.productType]

如果我删除所有 fetch 命令,它正在工作,为什么我不能使用 fetch?

标签: hibernatejpaspring-data-jpa

解决方案


您可以将 fetch 与分页一起使用,但您需要对计数行进行查询...

检查这篇文章 https://codingexplained.com/coding/java/spring-framework/fetch-query-not-working-spring-data-jpa-pageable#comment-293535


推荐阅读