hibernate - 无法获取任何字段
问题描述
我使用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?
解决方案
您可以将 fetch 与分页一起使用,但您需要对计数行进行查询...
推荐阅读
- angularjs - 无法访问我的模板指令中的任何路由
- for-loop - For循环打印出相同的结果
- python - 向flask+sqlalchemy关系列添加过滤器
- python - 构建用于牛眼皮疹识别的卷积神经网络
- node.js - 节点请求实体太大 body-parser 限制设置
- github-api - 在作曲家休息服务器中使用 github 进行身份验证后获取用户数据
- php - CSV文件未加载到mysql数据库中
- sql - Oracle SQL - 用于复制具有不同结果的列的嵌套选择语句
- javascript - 如何在 Vue Native 中使用 Firebase 身份验证
- django - 从 Django 中的 PayPal 按钮检索自定义变量