当前位置: 首页 > 知识库问答 >
问题:

spring MVC和Hibernate web应用程序启用惰性加载不能正常工作

松烨烨
2023-03-14

这是启用惰性加载插件

<plugin>
                    <groupId>org.hibernate.orm.tooling</groupId>
                    <artifactId>hibernate-enhance-maven-plugin</artifactId>
                    <version>${hibernate.version}</version>
                    <executions>
                        <execution>
                            <configuration>
                                <!--<failOnError>true</failOnError>-->
                                <enableLazyInitialization>true</enableLazyInitialization>
                                <!--<enableDirtyTracking>true</enableDirtyTracking>-->
                                <!--<enableAssociationManagement>true</enableAssociationManagement>-->
                            </configuration>
                            <goals>
                                <goal>enhance</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>

基于Hibernate Java的配置属性如下

private Properties hibernateProperties(DataSourceConfiguration dataSourceConfiguration) {

        Properties properties = new Properties();

//        properties.setProperty("hibernate.hbm2ddl.auto", dataSourceConfiguration.getDdlGeneration());
        properties.put("hibernate.dialect", dataSourceConfiguration.getDialect());
        properties.put("hibernate.enable_lazy_load_no_trans", true);
        properties.put("hibernate.jpa.compliance.transaction", true);
        properties.put("hibernate.jpa.compliance.query", true);
        properties.put("hibernate.jdbc.batch_size", 30);
        properties.put("hibernate.order_inserts", true);
        properties.put("hibernate.jdbc.batch_versioned_data", true);
        properties.put("hibernate.ejb.use_class_enhancer",true);
        properties.put("hibernate.enhancer.enableLazyInitialization",true);
//        properties.setProperty("hibernate.enhancer.enableAssociationManagement","true");
        properties.put("hibernate.current_session_context_class", dataSourceConfiguration.getCurrentSession());
        properties.put("hibernate.show_sql", dataSourceConfiguration.getShowsql());
        properties.put("hibernate.format_sql", dataSourceConfiguration.getFormatsql());
        properties.put("hibernate.discriminator.ignore_explicit_for_joined", "true");


        return properties;
    }

这是persistance.xml

http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd“>org.hibernate.jpa.hibernatePersistenceProvider

        <non-jta-data-source></non-jta-data-source>
        <properties>
            <!--<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/hcs?useSSL=false"/>
            <property name="javax.persistence.jdbc.user" value="root"/>
            <property name="javax.persistence.jdbc.password" value="root"/>-->

            <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
            <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/hcs?useSSL=false"/>
            <property name="hibernate.connection.username" value="root"/>
            <property name="hibernate.connection.password" value="root"/>
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
            <property name="hibernate.show_sql" value="true"/>
            <!--<property name="spring.jpa.properties.hibernate.ejb.use_class_enhancer" value="true"/>-->
            <!--<property name="hibernate.enhancer.enableLazyInitialization" value="true"/>-->
            <!-- <property name="hibernate.hbm2ddl.auto" value="validate"/>-->
            <property name="hibernate.discriminator.ignore_explicit_for_joined" value="true"/>
        </properties>
    </persistence-unit>

</persistence>

在运行时,我得到以下异常

org.springframework.beans.factory.BeanCreationException:创建com.orsbv.hcs.config.hcsRepositoryContext中定义的名为“Entity ManagerFactory”的bean时出错:调用init方法失败;嵌套异常是Java.lang.IllegalStateException:必须从Java代理开始才能使用InstrumentationLoadTimeWeaver。见spring文件。在org.springframework.beans.factory.support.abstractautoWirecapablebeanfactory.initializeBean(abstractautoWirecapablebeanfactory.java:1704)在org.springframework.beans.factory.support.abstractautoWirecapablebeanfactory.docreateBean(abstractautoWirecapablebeanfactory.583)在nText.Support.AbstractApplicationContext.FinishBeanFactoryInitialization(AbstractApplicationContext.java:858)(位于org.springFramework.context.java:849)(位于org.springFramework.web.context.contextLoader.ConfigureandRefresh(AbstractApplicationContext.java:549)(位于Java:266)在Java.util.concurrent.ThreadPoolExecutor.RunWorker(ThreadPoolExecutor.Java:1149)在Java.util.concurrent.ThreadPoolExecutor$worker.run(ThreadPoolExecutor.624)在Java.lang.Thread.Run(Thread.Java:748)原因:Java.lang.IllegalStateException:必须从Java代理开始使用InstrumentationLoadTimeWeaver。参见spring文档。在org.springframework.util.assert.State(AVA:164)在org.springframework.orm.jpa.vendor.springhibernateJPaperSistenceProvider.CreateContainerEntityManagerFactory(springhibernateJPaperSistenceProvider.java:51)

共有1个答案

松和璧
2023-03-14

最后,惰性加载可以使用以下配置

private Properties hibernateProperties(DataSourceConfiguration dataSourceConfiguration) {
        Properties properties = new Properties();
        properties.setProperty(AvailableSettings.HBM2DDL_AUTO, dataSourceConfiguration.getDdlGeneration());
        properties.setProperty(AvailableSettings.DIALECT, "org.hibernate.dialect.MySQLInnoDBDialect");
        properties.setProperty(AvailableSettings.IGNORE_EXPLICIT_DISCRIMINATOR_COLUMNS_FOR_JOINED_SUBCLASS, "true");
        properties.setProperty("hibernate.jpa.compliance.transaction", "true");
        properties.setProperty("hibernate.jpa.compliance.query", "true");
        properties.setProperty("hibernate.jpa.compliance.list", "true");
        properties.setProperty(AvailableSettings.JPA_ID_GENERATOR_GLOBAL_SCOPE_COMPLIANCE, "true");
        properties.setProperty(AvailableSettings.JPAQL_STRICT_COMPLIANCE, "true");
        properties.setProperty(AvailableSettings.ENABLE_LAZY_LOAD_NO_TRANS, "true");
        properties.setProperty(AvailableSettings.SHOW_SQL, dataSourceConfiguration.getShowsql());
        properties.setProperty(AvailableSettings.FORMAT_SQL, "false");
        properties.setProperty(AvailableSettings.CONNECTION_PROVIDER_DISABLES_AUTOCOMMIT, "true");
        properties.setProperty(AvailableSettings.MAX_FETCH_DEPTH, "4");
        properties.setProperty(AvailableSettings.DEFAULT_BATCH_FETCH_SIZE, "16");
        properties.setProperty(AvailableSettings.ORDER_UPDATES, "true");
        properties.setProperty(AvailableSettings.USE_SECOND_LEVEL_CACHE, "true");
        properties.setProperty(AvailableSettings.CACHE_REGION_FACTORY,
                "org.hibernate.cache.jcache.JCacheRegionFactory");
        properties.setProperty("hibernate.javax.cache.provider", "org.ehcache.jsr107.EhcacheCachingProvider");
        properties.setProperty(AvailableSettings.MULTI_TENANT, "DATABASE");
        properties.setProperty(AvailableSettings.MULTI_TENANT_IDENTIFIER_RESOLVER,
                TenantIdentifierResolver.class.getName());

        properties.put(AvailableSettings.MULTI_TENANT_CONNECTION_PROVIDER, multiTenantConnectionProvider());
        return properties;
    }
 类似资料:
  • 我正在使用JPA2.1(Eclipselink2.5.1)和JBoss7.1。 为什么不工作是懒惰加载? 谢谢

  • 我想让我的Javafx FXML应用程序开始最大化,所以我在我的阶段中使用了方法。 程序以最大化方式打开没有问题,但问题是在窗口出现之前,有一个小的黑色区域在应用程序启动时闪烁半秒。 我发现问题出在这个场景上,因为它试图在prefWidth和prefHeight中打开,然后它向上缩放以适应舞台。我怎样才能修复这一点,使程序像正常程序一样启动? 下面是我的start()方法:

  • 我遇到的问题类似于以下情况:Jboss Wildfly EJB3和Mybatis部署错误:NoSuchMethodError javax.persistence.table.indexes()[ljavax/persistence/index;但这并没有阻止我部署EAR,我的问题发生在尝试执行DAO中的一个方法时,该方法使用Mybatis映射器,并对另一个映射器进行惰性加载引用。我得到以下异常:

  • testFX。java: testFXController.java: 测验fxml: 当我运行testFX. java时,系统打印: 这是教授的代码,我似乎无法运行它。我意识到主要问题在代码

  • 我被要求将我们应用程序中警报对话框的外观与应用程序主题使用的外观相匹配。 我设法将一种样式应用于应用程序中的所有警报对话框,并将其作为应用程序主题的一部分,但也有一些情况样式应用不正确。 例如,当警报对话框包含“单一选择列表”作为其“消息”时,就会发生这种情况。 标题看起来不错,背景和按钮栏也不错,但是列表本身是有问题的。 起初,单选按钮及其它们的文本描述是黑色的,好像android使用默认颜色。

  • 我谷歌了很多,这是真的奇怪的Spring Boot(最新版本)可能没有懒惰加载是不工作的。以下是我的代码片段: 我的资源: 我的服务: 编辑2: 对于规范构建,我有: