jpa + spring + test,存储库类无法找到

时间:2017-01-14 15:12:01

标签: java spring testing spring-data-jpa

我想测试弹簧jpa但是得到 通过字段'personRepository'表示不满意的依赖;

@Entity
public class Person {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;
    private String name;
    private String code;
    private int flag;
    private String source;
    //getters and setters ...
}


@Repository
public interface PersonRepository extends JpaRepository<Person, AtomicInteger> {
    Person findByName(String name);
    Person findByCodeAndName();
    @Query("from Person p where p.name = :name")
    Person findUser(@Param("name") String name);
}

和我的ConfigClass:我需要花费@EnableJpaRepositories吗?

    @EnableWebSecurity
@EnableGlobalMethodSecurity(securedEnabled = true, prePostEnabled = true)
@EnableJpaRepositories(
        basePackages = {"learn.jpaRepository"},
        basePackageClasses = {PersonRepository.class})
@EntityScan(basePackages = "learn.model")
@ComponentScan(basePackages = "learn")
@SpringBootApplication
public class LearnConfig {
}

我在main / resources中的application.properties

    spring.datasource.url = jdbc:mysql://localhost:3306/learnspring
spring.datasource.username = root
spring.datasource.password = root
spring.datasource.driverClassName = com.mysql.jdbc.Driver
spring.jpa.database = MYSQL
spring.jpa.show-sql = true
spring.jpa.hibernate.ddl-auto = update
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect

和我的测试类:此测试需要的每个类都在pom.xml中

@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = LearnConfig.class)
public class Main {

    @Autowired
    PersonRepository personRepository;

    @Test
    public void testFunctionConfig() {
        Person p = personRepository.findByName("clz");
        System.out.println(p.getName());
    }
}

我刚收到以下错误:

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'personRepository': Invocation of init method failed; nested exception is java.util.NoSuchElementException

1 个答案:

答案 0 :(得分:0)

Spring无法加载PersonRepository,因为findByCodeAndName查询方法中缺少参数,请将其更改为:

@Repository
public interface PersonRepository extends JpaRepository<Person, AtomicInteger> {
    ...
    Person findByCodeAndName(String code, String name);
    ...
}