如何解决未在Spring Boot中使用join fetch jpql加载Manytoone惰性属性
我正在使用Spring Boot 2.3.0,Hibernate 5和MySQL 8.0 我正在尝试在我的JQPL查询中使用联接获取来初始化ManyToOne关系,但由于该实体未加载,因此无法正常工作。
在实体中,我有:
@Entity
public class Academic_Record {
@JoinColumn(name = "product_id",nullable = false)
@ManyToOne(fetch = FetchType.LAZY,optional = false)
private Product product;
.....
在存储库中:
@Query(value = "select ar from Academic_Record ar " +
"join fetch ar.product p " +
"where ar.enrollmentStudent.id = :enrollmentStudentId " +
"and ar.product.id = :productId")
Academic_Record findByEnrollmentStudentIdAndProductIdWithProduct(Long enrollmentStudentId,Integer productId);
但是如果尝试:
Academic_Record academicRecord = academicRecordDao.findByEnrollmentStudentIdAndProductIdWithProduct(1,2);
当我在调试模式下观看AcademicRecord的产品属性时,我只会看到一个代理对象,而没有加载该产品。
怎么了?
非常感谢
解决方法
这是FetchType.LAZY
的默认行为,当您尝试获取产品时,代理将被解析。如果要同时加载产品,请改用FetchType.EAGER
。
@JoinColumn(name = "product_id",nullable = false)
@ManyToOne(fetch = FetchType.EAGER,optional = false)
private Product product;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。