从OpenJPA(2.2.2)迁移至EclipseLink(2.5.2):求对应替代代码
OpenJPA到EclipseLink 2.5.2的FetchPlan替代实现
原OpenJPA代码的核心是为Test实体指定查询时需抓取的特定属性,以下是对应的EclipseLink替代实现:
import org.eclipse.persistence.jpa.JpaEntityManager; import org.eclipse.persistence.jpa.JpaHelper; // 将通用EntityManager转换为EclipseLink专属JpaEntityManager JpaEntityManager kem = JpaHelper.getEntityManager(em); // 通过FetchGroup指定需抓取的属性(替代OpenJPA的FetchPlan) kem.getFetchGroup().addAttribute("stringvalue"); kem.getFetchGroup().addAttribute("other string value"); // 显式指定实体类的写法(可选,若当前上下文未绑定Test实体时使用) // kem.getFetchGroup(Test.class).addAttribute("stringvalue"); // kem.getFetchGroup(Test.class).addAttribute("other string value"); // 对应原逻辑:若原EntityManager并非EclipseLink原生实例,则关闭转换后的实例 if (!(em instanceof JpaEntityManager)) { kem.close(); }
补充说明
- EclipseLink中
FetchGroup对应OpenJPA的FetchPlan,用于控制实体属性的抓取策略。 - 若需要自定义独立抓取组(而非使用默认组),可通过以下方式创建并设置:
import org.eclipse.persistence.queries.FetchGroup; import java.util.Arrays; FetchGroup customFetchGroup = kem.getEntityManagerFactory() .getFetchGroupManager() .createFetchGroup("testCustomGroup"); customFetchGroup.addAttributes(Arrays.asList("stringvalue", "other string value")); kem.setFetchGroup(customFetchGroup);
内容的提问来源于stack exchange,提问作者Arun Rajan
相关产品推荐
相关产品推荐

