我有一个包含继承的实体,它们的构建方式与此处的文章类似:http://blog.netgloo.com/2014/12/18/handling-entities-inheritance-with-spring-data-jpa/
我的抽象基类是 Promotion,子类是 AssortmentPromotion。
在我的映射器函数中,我调用以下代码:
Promotion promotion = promotionRepository
.findById(source.getPromotion().getId())
.orElseThrow(() -> new BadRequestException("Invalid Promotion"));
现在,促销变量不是有效的 AssortmentPromotion,如下图所示。此外,promotion instanceof AssortmentPromotion
返回 false。
知道我可以做什么来获得真正的实体对象吗?
最佳答案
Hibernate 使用javassist增强和代理实体类。这主要是为了关联实体(@ManyToOne、@OneToOne)的延迟加载“魔法”。
有很多文章如何完成此操作以及如何取消代理此类实体: https://vladmihalcea.com/how-does-a-jpa-proxy-work-and-how-to-unproxy-it-with-hibernate/
org.hibernate.Hibernate.unproxy(promotion);
关于java - Spring Boot存储库不返回真实实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52541219/