java - Spring Boot存储库不返回真实实体

标签 java hibernate spring-boot spring-data-jpa

我有一个包含继承的实体,它们的构建方式与此处的文章类似: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。

Not A real promotion

知道我可以做什么来获得真正的实体对象吗?

最佳答案

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);

http://docs.jboss.org/hibernate/orm/5.2/javadocs/org/hibernate/Hibernate.html#unproxy-java.lang.Object-

关于java - Spring Boot存储库不返回真实实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52541219/

相关文章:

hibernate - 使用和/或在标准中时出现 NullPointerException

java - Spring mvc + hibernate 上下文初始化失败 org.springframework.beans.factory.BeanCreationException : Error creating bean

Spring Boot - 在war文件中设置application.properties的位置

java - Google Apps 脚本是否可以通过 HTTP POST 接收文件?

java - 如何在 webflux 中异步解析/写入 json? ObjectMapper 方法是阻塞的

java - 中断和标签, "The label MyLabel is missing"

java - 如果连接已关闭,Spring 客户端需要从池中检索连接

java - 无法使用 Hibernate 更新实体

java - SpringBoot JPA data.sql失败

java - 即使提到了节点 ID,所有计划作业都在运行