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

如何在SpringMVC中配置JPA?

壤驷鸿
2023-03-14

我试图在我的应用程序中实现jpa

发展能力

所以,我的DataConfig看起来像这样:

import org.hibernate.ejb.HibernatePersistence;
import org.hibernate.jpa.HibernatePersistenceProvider;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.core.env.Environment;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import javax.annotation.Resource;
import javax.sql.DataSource;
import java.util.Properties;

@Configuration
@EnableTransactionManagement
@ComponentScan("ru.sbrf.risks.services.data")
@PropertySource("classpath:app.properties")
@EnableJpaRepositories("ru.sbrf.risks.services.data.persistence")
public class DataConfig {
    private static final String PROP_DATABASE_DRIVER = "db.driver";
    private static final String PROP_DATABASE_URL = "db.url";
    private static final String PROP_DATABASE_USERNAME = "db.username";
    private static final String PROP_HIBERNATE_DIALECT = "db.hibernate.dialect";
    private static final String PROP_HIBERNATE_SHOW_SQL = "db.hibernate.show_sql";
    private static final String PROP_ENTITYMANAGER_PACKAGES_TO_SCAN = "db.entitymanager.packages.to.scan";
    private static final String PROP_HIBERNATE_HBM2DDL_AUTO = "db.hibernate.hbm2ddl.auto";

    @Resource
    private Environment env;

    @Bean
    public DataSource dataSource() {
        DriverManagerDataSource dataSource = new DriverManagerDataSource();

        dataSource.setDriverClassName(env.getRequiredProperty(PROP_DATABASE_DRIVER));
        dataSource.setUrl(env.getRequiredProperty(PROP_DATABASE_URL));
        dataSource.setUsername(env.getRequiredProperty(PROP_DATABASE_USERNAME));
        dataSource.setPassword(env.getRequiredProperty("db.password"));

        return dataSource;
    }

    @Bean
    public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
        LocalContainerEntityManagerFactoryBean entityManagerFactoryBean = new LocalContainerEntityManagerFactoryBean();
        entityManagerFactoryBean.setDataSource(dataSource());
        entityManagerFactoryBean.setPersistenceProviderClass(HibernatePersistence.class);
        entityManagerFactoryBean.setPackagesToScan(env.getRequiredProperty(PROP_ENTITYMANAGER_PACKAGES_TO_SCAN));

        entityManagerFactoryBean.setJpaProperties(getHibernateProperties());

        return entityManagerFactoryBean;
    }

    @Bean
    public JpaTransactionManager transactionManager() {
        JpaTransactionManager transactionManager = new JpaTransactionManager();
        transactionManager.setEntityManagerFactory(entityManagerFactory().getObject());

        return transactionManager;
    }

    private Properties getHibernateProperties() {
        Properties properties = new Properties();
        properties.put(PROP_HIBERNATE_DIALECT, env.getRequiredProperty(PROP_HIBERNATE_DIALECT));
        properties.put(PROP_HIBERNATE_SHOW_SQL, env.getRequiredProperty(PROP_HIBERNATE_SHOW_SQL));
        properties.put(PROP_HIBERNATE_HBM2DDL_AUTO, env.getRequiredProperty(PROP_HIBERNATE_HBM2DDL_AUTO));

        return properties;
    }
}

但是,当我尝试启动应用程序时,会出现错误消息。制造战争-

已连接到服务器[2018-09-26 09:54:32631]工件未命名:正在部署工件,请稍候。。。2018年9月26日09:54:34.460警告[RMI TCP连接(3)-127.0.0.1]组织。阿帕奇。公猫dbcp。dbcp2。基本资源工厂。getObjectInstance Name=LanitBPM属性maxActive未在DBCP2中使用,请改用maxTotal。maxTotal默认值为8。您已将“maxActive”属性的值设置为“3”,该值将被忽略。2018年9月26日09:54:34.587信息[RMI TCP连接(3)-127.0.0.1]组织。阿帕奇。贾斯珀。servlet。TldScanner。scanJars至少有一个JAR已扫描TLD,但未包含TLD。为此记录器启用调试日志记录以获取已扫描的JAR的完整列表,但未找到TLD。在扫描过程中跳过不需要的JAR可以缩短启动时间和JSP编译时间。2018年9月26日09:54:34.814信息[RMI TCP连接(3)-127.0.0.1]组织。springframework。网状物上下文上下文加载器。initWebApplicationContext根WebApplicationContext:初始化已开始2018年9月26日09:54:34.873信息[RMI TCP连接(3)-127.0.0.1]组织。springframework。网状物上下文支持注释ConfigWebApplicationContext。prepareRefresh刷新根Web应用程序上下文:启动日期[Wed Sep 26 09:54:34 MSK 2018];上下文层次结构的根目录2018年9月26日09:54:35.051信息[RMI TCP连接(3)-127.0.0.1]组织。springframework。网状物上下文支持注释ConfigWebApplicationContext。LoadBean注册注释类的定义:[class ru.sbrf.risks.services.data.service.config.ServiceConfig,class ru.sbrf.risks.services.data.persistence.config.DataConfig,class ru.sbrf.risks.services.data.web.config.WebConfig]26-Sep-2018 09:54:35.583警告[RMI TCP连接(3)-127.0.0.1]org。springframework。网状物上下文支持注释ConfigWebApplicationContext。上下文初始化期间遇到刷新异常-取消刷新尝试:org。springframework。豆。工厂BeanDefinitionStoreException:未能分析配置类[ru.sbrf.risks.services.data.persistence.config.DataConfig];嵌套的异常是java。lang.IllegalStateException:未能内省类ru上带注释的方法。sbrf。风险。服务。数据坚持不懈配置。DataConfig 2018年9月26日09:54:35.596严重[RMI TCP连接(3)-127.0.0.1]组织。springframework。网状物上下文上下文加载器。initWebApplicationContext上下文初始化失败。springframework。豆。工厂BeanDefinitionStoreException:未能分析配置类[ru.sbrf.risks.services.data.persistence.config.DataConfig];嵌套的异常是java。lang.IllegalStateException:未能内省类ru上带注释的方法。sbrf。风险。服务。数据坚持不懈配置。org上的DataConfig。springframework。上下文注释。ConfigurationClassParser。解析(ConfigurationClassParser.java:181)。。。原因:java。lang.IllegalStateException:未能内省类ru上带注释的方法。sbrf。风险。服务。数据坚持不懈配置。org上的DataConfig。springframework。果心类型标准注释元数据。org上的getAnnotatedMethods(StandardAnnotationMetadata.java:163)。springframework。上下文注释。ConfigurationClassParser。在org上检索BeanMethodMetadata(ConfigurationClassParser.java:380)。springframework。上下文注释。ConfigurationClassParser。doProcessConfigurationClass(ConfigurationClassParser.java:314)位于org。springframework。上下文注释。ConfigurationClassParser。org上的processConfigurationClass(ConfigurationClassParser.java:245)。springframework。上下文注释。ConfigurationClassParser。在org上解析(ConfigurationClassParser.java:198)。springframework。上下文注释。ConfigurationClassParser。解析(ConfigurationClassParser.java:167)。。。54更多[2018-09-26 09:54:35640]工件未命名:工件部署期间出错。有关详细信息,请参阅服务器日志。原因:java。lang.NoClassDefFoundError:org/springframework/orm/jpa/JpaTransactionManager位于java。朗朗,上课。java上的getDeclaredMethods0(本机方法)。朗朗,上课。java上的privateGetDeclaredMethods(Class.java:2701)。朗朗,上课。getDeclaredMethods(Class.java:1975)位于org。springframework。果心类型标准注释元数据。getAnnotatedMethods(StandardAnnotationMetadata.java:152)。。。59更多的原因是:java。lang.ClassNotFoundException:org。springframework。奥姆。jpa。组织的JpaTransactionManager。阿帕奇。卡塔琳娜。加载器。WebappClassLoaderBase。位于org的loadClass(WebappClassLoaderBase.java:1291)。阿帕奇。卡塔琳娜。加载器。WebappClassLoaderBase。loadClass(WebappClassLoaderBase.java:1119)。。。63多

-2018 09:54:35.6029月26日SEVERE[RMI TCP连接(3)-127.0.0.1]org.apache.catalina.core.标准ontext.start内部一个或多个侦听器启动失败。完整的细节将在适当的容器日志文件中找到-2018 09:54:35.603SEVERE[RMI TCP连接(3)-127.0.0.1]org.apache.catalina.core.标准ontext.start内部上下文[]由于以前的错误启动失败--plhd--14/>INFO[localhost-starStob-1]org.apache.catalina.startup.HostConfig.deploy目录部署Web应用程序目录[C:\java\apache-tomcat-8.5.29\webapps\Manager] 26-Sep-2018 09:54:42.629INFO[localhost-starStop-1]org.apache.catalina.startup.HostConfig.deploy目录部署Web应用程序目录[C:\java\apache-tomcat-8.5.29\webapps\Manager]已完成在[189]ms

是否有更好的方法将jpa与SpringMVC结合使用?(无Spring靴)

应用程序。特性:

#DB properties: 
db.driver=com.mysql.jdbc.Driver 
db.url=jdbc:mysql://localhost:3306/mydb 
db.username=root 
db.password=111111

#Hibernate Configuration:    
db.hibernate.dialect=org.hibernate.dialect.MySQLDialect   
db.hibernate.show_sql=true    
db.entitymanager.packages.to.scan=ru.sbrf.risks.services.data
db.hibernate.hbm2ddl.auto = create

波姆。xml是

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>MyApp</groupId>
    <artifactId>MyApp</artifactId>
    <version>1.0</version>
    <packaging>war</packaging>

    <properties>
        <java.version>1.8</java.version>
        <spring.version>4.3.9.RELEASE</spring.version>
        <spring.data>2.1.0.RELEASE</spring.data>
        <swagger.version>2.7.0</swagger.version>
        <hibernate.version>5.3.6.Final</hibernate.version>
    </properties>

    <dependencies>
        <!--SPRING-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aspects</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <!-- Servlet-->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.0.1</version>
            <scope>provided</scope>
        </dependency>
        <!-- SWAGGER-->
        <!--<dependency>-->
            <!--<groupId>io.springfox</groupId>-->
            <!--<artifactId>springfox-swagger2</artifactId>-->
            <!--<version>${swagger.version}</version>-->
        <!--</dependency>-->
        <!--<dependency>-->
            <!--<groupId>io.springfox</groupId>-->
            <!--<artifactId>springfox-swagger-ui</artifactId>-->
            <!--<version>${swagger.version}</version>-->
        <!--</dependency>-->
        <!--DATA BASE-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>6.0.6</version>
            <scope>runtime</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.springframework.data/spring-data-jpa -->
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-jpa</artifactId>
            <version>${spring.data}</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>4.3.8.Final</version>
        </dependency>
        <!--<dependency>-->
            <!--<groupId>com.fasterxml.jackson.dataformat</groupId>-->
            <!--<artifactId>jackson-dataformat-xml</artifactId>-->
            <!--<version>2.9.6</version>-->
        <!--</dependency>-->
    </dependencies>
    <build>
        <finalName>MyApp</finalName>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <configuration>
                    <failOnMissingWebXml>false</failOnMissingWebXml>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

共有1个答案

张和颂
2023-03-14

DataSource bean-好的

PlatformTransactionManager/JpaTransactionManager-未完成:

@Bean
public JpaTransactionManager transactionManager(EntityManagerFactory entityManagerFactory) {
    JpaTransactionManager transactionManager = new JpaTransactionManager();
    transactionManager.setEntityManagerFactory(entityManagerFactory);
    return transactionManager;
}

LocalContainerEntityManagerFactoryBean-未完成

@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
    LocalContainerEntityManagerFactoryBean entityManager = new LocalContainerEntityManagerFactoryBean();
    entityManager.setDataSource(dataSource());
    entityManager.setPackagesToScan("some package(s)");
    entityManager.setJpaVendorAdapter(new HibernateJpaVendorAdapter());
    entityManager.setJpaProperties(hibernateProperties);
    return entityManager;
}

我不使用下一个类注释:
@ComponentScan(“…”)//您可以在entityManagerFactory中使用scan(“…”)//您可以使用env。getProperty
@EnableJpaRepositories(“…”)

我使用下一个关于Jpa/Hibernate的包:

compile group: 'org.springframework', name: 'spring-webmvc', version: SPRING_VERSION
compile group: 'org.springframework.data', name: 'spring-data-jpa', version: SPRING_DATA_VERSION
compile group: 'org.springframework', name: 'spring-orm', version: SPRING_VERSION

compile group: 'mysql', name: 'mysql-connector-java', version: MYSQL_CONNECTOR_VERSION

compile group: 'org.hibernate', name: 'hibernate-core', version: HIBERNATE_VERSION
compile group: 'org.hibernate', name: 'hibernate-entitymanager', version: HIBERNATE_VERSION

 类似资料:
  • 我试图创建一个springmvc项目配置与Hibernate使用web.xml 我的问题是,当我运行时,它不会自动创建用户表。 这是我的代码: 文件spring-config.xml 文件web.xml: 文件UserDAO: 文件UserDaoImpl: 文件用户: 这是我的日志:

  • 问题内容: 当我将struts.xml放入web-inf时显示错误......当我将src文件夹放入时,它工作正常。(在web- inf中为applicationcontext.xml) 当我将applicationcontext.xml放在src文件夹中时(在(src文件夹或src / resources)中为struts.xml).......这就是说无法在web-inf文件夹中找到appli

  • 问题内容: 我有一个正在Swing中构建的应用程序。它具有可滚动和缩放的图表组件,可以平移和缩放它。整个过程很平滑,除了有时UI会暂停约750 ms,我不知道为什么。这种情况并非总是会发生-但有时应用程序中会发生某些事情,并且每6-8秒就会开始暂停一次。 很显然,EDT上有一些事件需要花费750毫秒左右的时间才能运行,这不应该发生。 我如何特别像这样配置EDT?我真正想做的是获取在每次事件在EDT

  • https://docs . JBoss . org/hibernate/ORM/5.2/javadocs/org/hibernate/interceptor . html说onPrepareStatement(字符串sql)不推荐使用。如果希望检查和修改SQL语句,请提供StatementInspector。 但是我不清楚如何在hibernate中在应用程序级别配置StatementInspec

  • 我在学习Spring Boot时遇到了一些编码问题;我想添加一个像Spring3.x那样的CharacterEncodingFilter。就像这样:

  • 我有一个使用以下方法的会话豆: 返回的CalculationResult无法映射到JSON,并出现以下异常: 如何在 Wildfly 中配置杰克逊及其?