繁体   English   中英

在EclipseLink中分离实体

[英]Detaching Entities in EclipseLink

我在JPA 2.1 EclipseLink中分离实体时遇到问题。

我有一个JavaEE应用程序,其中某些实体的所有关系都设置为延迟加载。 我在所有数据库查询中都使用了join fetch,以便仅获取所需的对象。 我使用Jackson(FasterXml)将对象转换为JSON(用于JAX-RS等)

每当我从数据库中选择任何实体时,我都会在返回该实体之前分离该实体,以避免当Jackson将对象转换为JSON时在数据库上运行太多查询(因为此转换将调用要转换的实体中的所有getter)。

我的问题是分离不起作用,当我查看JPA日志时,我看到该实体的所有成员都已转换并由查询加载到数据库中。 当Jackson将对象转换为JSON时会发生这种情况,而我的猜测是,因为Jackson在转换对象时调用了吸气剂。 为什么会发生这种情况,我该如何解决?

认为EclipseLink的分离仅用于停止跟踪更改,出于性能原因将其从EM中撤出。 根据JPA规范访问未提取的属性会导致异常; 似乎没有用户真正在早期请求的东西,因此未实现该行为。 如果您想要这种行为,请提出要求。

任何人都可以在其访问器中检查懒惰属性的获取状态,并引发应用程序异常。 这将需要修改EclipseLink通过编织生成的增强型Java代码,以访问惰性属性。

另一种解决方案可能是使用构造函数查询 构造函数查询而不是返回托管实体对象,而是将选择值传递给java构造函数,因此仅包括在查询中获取的数据。 这些对象不是实体,因此是完全分离的,并且可以构建任何java对象,甚至是现有的Entity类。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM