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

如何设置Spring数据JPA存储库?

卫弘义
2023-03-14

又不想工作,我不知道是怎么回事。

日志包含以下消息:

    org.springframework.beans.factory.UnsatisfiedDependencyExcep tion: Error creating bean with name 'userServiceImpl': Unsatisfied dependency expressed through field 'userRepository'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionExcept ion: No qualifying bean of type 'com.testjpaspring.repository.UserRepository' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(req uired=true)}

将项目放在github https://github.com/romanych2021/testjpaspring上

    package com.testjpaspring.repository;

    import com.testjpaspring.model.User;
    import org.springframework.data.jpa.repository.JpaRepository;
    import org.springframework.stereotype.Repository;

    @Repository
    public interface UserRepository extends JpaRepository<User, Long> {
        User findByUsername (String username);
    }
    package com.testjpaspring.service;

    import com.testjpaspring.model.User;
    import org.springframework.stereotype.Service;

    @Service
    public interface UserService {
        User findByUsername (String username);
    }
    package com.testjpaspring.service;

    import com.testjpaspring.model.User;
    import com.testjpaspring.repository.UserRepository;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;

    import javax.transaction.Transactional;

    @Service
    @Transactional
    public class UserServiceImpl implements UserService{

        @Autowired
        UserRepository userRepository;


        @Override
        public User findByUsername(String username) {
            return userRepository.findByUsername(username);
        }
    }
    package com.testjpaspring.controller;

    import com.testjpaspring.service.UserService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.ResponseBody;

    @Controller
    public class MyController {


        @Autowired
        UserService userService;


        @ResponseBody
        @GetMapping(value = "/")
        public String home () {
            return userService.findByUsername("roma").getUsername();

        }


    }
    package com.testjpaspring.config;

    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.ComponentScan;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor;
    import org.springframework.jdbc.datasource.DriverManagerDataSource;
    import org.springframework.orm.jpa.JpaTransactionManager;
    import org.springframework.orm.jpa.JpaVendorAdapter;
    import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
    import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
    import org.springframework.transaction.PlatformTransactionManager;
    import org.springframework.transaction.annotation.EnableTransactionManagement;
    import org.springframework.web.servlet.config.annotation.EnableWebMvc;
    import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

    import javax.sql.DataSource;
    import java.util.Properties;

    @EnableWebMvc
    @Configuration
    @EnableTransactionManagement
    @ComponentScan({"com.testjpaspring.repository", "com.testjpaspring.service"})
    public class RootConfig implements WebMvcConfigurer {


        @Bean
        public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
            LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
            em.setDataSource(dataSource());
            em.setPackagesToScan("com.testjpaspring.model");

            JpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
            em.setJpaVendorAdapter(vendorAdapter);
            em.setJpaProperties(additionalProperties());

            return em;
        }


        @Bean
        public DataSource dataSource(){
            DriverManagerDataSource dataSource = new DriverManagerDataSource();
            dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
            dataSource.setUrl("jdbc:mysql://localhost:3306/testjpaspring?serverTimezone=UTC&useSSL=false");
            dataSource.setUsername( "root" );
            dataSource.setPassword( "1234" );
            return dataSource;
        }



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

            return transactionManager;
        }

        @Bean
        public PersistenceExceptionTranslationPostProcessor exceptionTranslation(){
            return new PersistenceExceptionTranslationPostProcessor();
        }

        Properties additionalProperties() {

            Properties properties = new Properties();
            properties.setProperty("hibernate.hbm2ddl.auto", "create-drop");
            properties.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQL8Dialect");

            return properties;
        }

    }
    
    package com.testjpaspring.config;

    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.ComponentScan;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.servlet.ViewResolver;
    import org.springframework.web.servlet.config.annotation.EnableWebMvc;
    import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
    import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer;
    import org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver;

    import java.util.Properties;

    @Configuration
    @EnableWebMvc
    @ComponentScan({"com.testjpaspring.controller"})
    public class Config implements WebMvcConfigurer{



        @Bean
        public FreeMarkerConfigurer freeMarkerConfigurer() {
            FreeMarkerConfigurer configurer = new FreeMarkerConfigurer();
            configurer.setTemplateLoaderPath("/WEB-INF/templates");
            configurer.setDefaultEncoding("UTF-8");

            Properties properties =  new Properties();
            properties.setProperty("default_encoding", "UTF-8");

            configurer.setFreemarkerSettings(properties);

            return configurer;
        }


        @Bean
        public ViewResolver getViewResolver(){
            FreeMarkerViewResolver viewResolver = new FreeMarkerViewResolver();
            viewResolver.setSuffix(".ftl");
            viewResolver.setContentType("text/html;charset=UTF-8");
            viewResolver.setCache(false);
            return viewResolver;
        }


    }
    <?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>com.testjpaspring</groupId>
        <artifactId>TestJpaSpring</artifactId>
        <version>1.0-SNAPSHOT</version>


        <build>
            <plugins>

                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.8.1</version>
                    <configuration>
                        <source>${java.version}</source>
                        <target>${java.version}</target>
                        <encoding>${encoding}</encoding>
                    </configuration>
                </plugin>

            </plugins>
        </build>

        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <failOnMissingWebXml>false</failOnMissingWebXml>
            <java.version>1.8</java.version>
            <encoding>UTF-8</encoding>
        </properties>

        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-framework-bom</artifactId>
                    <version>5.2.9.RELEASE</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
            </dependencies>
        </dependencyManagement>


        <dependencies>


    <!--        Spring Framework-->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-core</artifactId>
            </dependency>

            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-webmvc</artifactId>
            </dependency>

            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context-support</artifactId>
            </dependency>

            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-orm</artifactId>
            </dependency>

            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-jdbc</artifactId>
            </dependency>

            <dependency>
                <groupId>org.springframework.data</groupId>
                <artifactId>spring-data-jpa</artifactId>
                <version>2.3.4.RELEASE</version>
            </dependency>



    <!--        Hibernate-->
            <dependency>
                <groupId>org.hibernate</groupId>
                <artifactId>hibernate-entitymanager</artifactId>
                <version>5.4.21.Final</version>
            </dependency>




    <!--        Остальные-->
            <dependency>
                <groupId>org.freemarker</groupId>
                <artifactId>freemarker</artifactId>
                <version>2.3.30</version>
            </dependency>

            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>javax.servlet-api</artifactId>
                <version>4.0.1</version>
            </dependency>

            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>8.0.21</version>
            </dependency>


        </dependencies>


    </project>

共有1个答案

佘茂才
2023-03-14

你失踪了

@EnableJpaRepositories(basePackages = "com.testjpaspring.repository")

rootconfig类上。

事实上,类应该是这样的:

@Configuration
@ComponentScan("com.testjpaspring.service")
@EnableTransactionManagement
@EnableJpaRepositories(basePackages = "com.testjpaspring.repository")
public class RootConfig {
   // Keep method as are
}
 类似资料:
  • 它是否将其存储在缓存中?我有一个应用程序,但应用程序中没有任何地方。属性是提到的db详细信息。我可以通过邮递员存储数据和查询它。

  • 是否有一种方法可以使通用Spring数据JPA存储库正确处理类似的方法?例如只返回狗,而不返回所有动物?或者至少,最好的变通方法是什么? 它的工作几乎完美,保存每一个动物在自己的桌子上,等等。唯一的问题是:同时返回水豚和狗。这个答案解释说: 这只有在域类使用单表继承时才起作用。我们在引导时能得到的关于domain类的唯一信息是它将是Product对象。因此,对于像findAll()甚至findBy

  • 问题内容: 我有一个要求是按可分页和不可分页进行搜索, 在我的Java代码中,我使用spring data jpa Pageable类, 而且我不想更改退货结构, 因此,当出现无法分页的情况(全部搜索)时,如何将pageSize值设置为MAX? 问题答案: 与Spring MVC结合使用时,可以将注解与like 请参见PageableDefaults批注 Javadoc。 在任何其他客户端代码中,

  • 我还向b_spring.xml声明了另一个entityManagetFactory、事务管理器和dataSource。 误差 bean初始化失败;嵌套异常是org.springframework.beans.factory.nosuchbeanDefinitionException:没有定义[javax.persistence.entityManagerFactory]类型的唯一bean:预期的单

  • 问题内容: 是否可以为分配一个特定的? 我想创建一个测试环境,通常我想在其中使用测试数据源,但是有一些应该在不同的数据库(生产数据库;只读操作)上运行。 我可以明确告诉Spring将哪个数据源用于存储库吗? 问题答案: 是您问题的答案。这应该根据非正式文件一起使用。 请参阅此详细教程,以了解如何执行此操作。我并没有尽力在此处发布代码,因为您可以直接在其中更清楚地引用它们。 链接到教程…