Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jpa 将EclipseLink设置为LazyLoad一个集合,但它仍然通过Jersey返回_Jpa_Jersey_Eclipselink_Lazy Loading_Moxy - Fatal编程技术网

Jpa 将EclipseLink设置为LazyLoad一个集合,但它仍然通过Jersey返回

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

我已经设置了一个惰性集合,因为Jersey上的剩余有效负载太多,实际上我并不需要一直填充这个特定集合

我将集合设置为Lazy,希望它不会出现在我的rest响应中,但它仍在填充中

泽西岛是否以某种方式引发了收藏的数量

@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