Jpa 将EclipseLink设置为LazyLoad一个集合,但它仍然通过Jersey返回
我已经设置了一个惰性集合,因为Jersey上的剩余有效负载太多,实际上我并不需要一直填充这个特定集合 我将集合设置为Lazy,希望它不会出现在我的rest响应中,但它仍在填充中 泽西岛是否以某种方式引发了收藏的数量Jpa 将EclipseLink设置为LazyLoad一个集合,但它仍然通过Jersey返回,jpa,jersey,eclipselink,lazy-loading,moxy,Jpa,Jersey,Eclipselink,Lazy Loading,Moxy,我已经设置了一个惰性集合,因为Jersey上的剩余有效负载太多,实际上我并不需要一直填充这个特定集合 我将集合设置为Lazy,希望它不会出现在我的rest响应中,但它仍在填充中 泽西岛是否以某种方式引发了收藏的数量 @OneToMany(mappedBy="gpt", orphanRemoval = false, cascade = { javax.persistence.CascadeType.PERSIST, javax.persistence.CascadeType.MERGE }, fe
@OneToMany(mappedBy="gpt", orphanRemoval = false, cascade = { javax.persistence.CascadeType.PERSIST, javax.persistence.CascadeType.MERGE }, fetch = FetchType.LAZY)
@XmlElement
@XmlInverseReference(mappedBy = "gpt")
protected List<PrOpalProject> projects;
调用“getProducts.size()”不会触发SQL
所以我只能假设这是一件运动衫的“东西”
尽管如此,在互联网上阅读时,我还是将我的XMLAccessorType设置为“@XMLAccessorType(XmlAccessType.FIELD)”。这显然不应该导致延迟加载的集合被带过来
问候
我确保您的实体正在编织。如果不使用运行时/构建时编织,延迟加载将不起作用。我想Jersey触发加载是因为@XMLElement注释。也许你的问题与之类似。事实上,这很可能是“球衣事件”。防止这种情况发生的最简单方法是为DB实体和Web服务的DTO创建单独的类,并在它们之间映射。如果您不想编写太多样板代码,请使用一些映射程序,例如Dozer
这种方法还有其他优点。例如,您可以从XML模式生成DTO类。但最重要的是,它将DB模式与接口分离。这无疑是基于SOAP的Web服务的首选方法(请参阅中的注释)。由于REST根据定义与底层资源相关联,所以它可能是另一种情况。但是,如果你的服务不仅仅是简单的CRUD,你就应该考虑重构,因为这个分层的体系结构给了你必要的灵活性。顺便说一下,谢谢!我在persistence.xml中设置了这一组,对您的实体进行反编译,以确保它们确实已被编织。我如何知道它们是否被正确编织?我当然看到它似乎正在实现PersistenceWeaved接口……但我在寻找什么呢?这可能只是Jax-rs的事情吗?我不熟悉反编译代码……但在做一些测试时,我在原始问题中添加了更新2。Jersey在应用程序启动时做了一些测试…延迟加载正在起作用。但泽西岛上的REST响应已满负载。不确定这是否相关。显然,将XMLAccessorType用于字段不应触发空集合的紧急加载。我不确定这是否是我在Moxy中使用XMLInverseReference造成的。我猜列表的PrOpalProjects是用默认构造函数实例化的。您是否可以尝试在默认构造函数上设置断点,以检查在Jersey中执行时哪个组件负责加载列表内容?必须设置断点才能遍历对象图、Jersey轮询字段或检查数组大小,从而触发集合的加载?如果是这样的话……延迟加载无法工作。不确定是否与莫西有关。当我能够的时候,我会看看构造器。没有Jersey…惰性加载很有效。嗨,Blaise Doughan在该线程中似乎主张通过JPA和JAXB进行注释,这两种方法都是在域类上进行的,正如我所做的那样…他共同开发了EclipseLink Moxy…感谢您的回复,以前没有使用DTO的人将不得不做一些研究。
<properties>
<property name="eclipselink.target-database" value="Oracle"/>
<property name="eclipselink.ddl-generation" value="none"/>
<property name="eclipselink.weaving" value="static"/>
</properties>
<!-- This plugin ensures the EclipseLink static weaving -->
<plugins>
<plugin>
<artifactId>eclipselink-staticweave-maven-plugin</artifactId>
<groupId>au.com.alderaan</groupId>
<version>1.0.4</version>
<executions>
<execution>
<goals>
<goal>weave</goal>
</goals>
<phase>process-classes</phase>
<configuration>
<logLevel>ALL</logLevel>
</configuration>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.eclipse.persistence</groupId>
<artifactId>eclipselink</artifactId>
<version>${eclipselink.version}</version>
</dependency>
</dependencies>
</plugin>
</plugins>
<!--This plugin's configuration is used to store Eclipse m2e settings only.
It has no influence on the Maven build itself. -->
<pluginManagement>
<plugins>
<plugin>
<groupId>org.eclipse.m2e</groupId>
<artifactId>lifecycle-mapping</artifactId>
<version>1.0.0</version>
<configuration>
<lifecycleMappingMetadata>
<pluginExecutions>
<pluginExecution>
<pluginExecutionFilter>
<groupId>au.com.alderaan</groupId>
<artifactId>eclipselink-staticweave-maven-plugin</artifactId>
<versionRange>[1.0.4,)</versionRange>
<goals>
<goal>weave</goal>
</goals>
</pluginExecutionFilter>
<action>
<execute>
<runOnIncremental>true</runOnIncremental>
</execute>
</action>
</pluginExecution>
</pluginExecutions>
</lifecycleMappingMetadata>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
public void init() {
List<PrGPT> gpts = gptService.getAllGPTs();
for (PrGPT prGPT : gpts) {
System.out.println(prGPT.getProjects().size());
System.out.println(prGPT.getProducts().size());
}
[EL Fine]: sql: 2014-10-13 16:48:16.896--ServerSession(2099597535)--Connection(347358184)--Thread(Thread[localhost-startStop-1,5,main])--SELECT ID, APPROVED_PRIORITY, DISEASE, DISEASE_AREA, DPOM_BPOM_PHASE, IMED, MOLECULE_OR_TYPE_OF_PRODUCT, PLANNING_STATUS, PROGRAM_CATEGORY_DESC, PROGRAM_TYPE_DESC, PROJECT_CODE, PROJECT_NM, STATE, PROJECT_TYPE, THERAPY_AREA, GPT FROM PR_OPAL_PROJECT WHERE (GPT = ?)
bind => [17000]
0
0
[EL Fine]: sql: 2014-10-13 16:48:22.817--ServerSession(2099597535)--Connection(2007184558)--Thread(Thread[localhost-startStop-1,5,main])--SELECT ID, APPROVED_PRIORITY, DISEASE, DISEASE_AREA, DPOM_BPOM_PHASE, IMED, MOLECULE_OR_TYPE_OF_PRODUCT, PLANNING_STATUS, PROGRAM_CATEGORY_DESC, PROGRAM_TYPE_DESC, PROJECT_CODE, PROJECT_NM, STATE, PROJECT_TYPE, THERAPY_AREA, GPT FROM PR_OPAL_PROJECT WHERE (GPT = ?)
bind => [17050]
0
0
[EL Fine]: sql: 2014-10-13 16:48:25.06--ServerSession(2099597535)--Connection(202457351)--Thread(Thread[localhost-startStop-1,5,main])--SELECT ID, APPROVED_PRIORITY, DISEASE, DISEASE_AREA, DPOM_BPOM_PHASE, IMED, MOLECULE_OR_TYPE_OF_PRODUCT, PLANNING_STATUS, PROGRAM_CATEGORY_DESC, PROGRAM_TYPE_DESC, PROJECT_CODE, PROJECT_NM, STATE, PROJECT_TYPE, THERAPY_AREA, GPT FROM PR_OPAL_PROJECT WHERE (GPT = ?)
bind => [9500]
1
0