Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.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
Spring boot 使用JPA移动Spring访问数据入门指南_Spring Boot_Spring Data Jpa - Fatal编程技术网

Spring boot 使用JPA移动Spring访问数据入门指南

Spring boot 使用JPA移动Spring访问数据入门指南,spring-boot,spring-data-jpa,Spring Boot,Spring Data Jpa,我可以直接从以下网站获得在我的机器上运行的示例应用程序: 这个示例应用程序让您从H2嵌入式数据库的简单实现开始 它只需要两个依赖项即可运行: dependencies { compile("org.springframework.boot:spring-boot-starter-data-jpa") compile("com.h2database:h2") testCompile("junit:junit") } 此处声明存储库供您参考: package hello; imp

我可以直接从以下网站获得在我的机器上运行的示例应用程序:

这个示例应用程序让您从H2嵌入式数据库的简单实现开始

它只需要两个依赖项即可运行:

dependencies {
   compile("org.springframework.boot:spring-boot-starter-data-jpa")
   compile("com.h2database:h2")
   testCompile("junit:junit")
}
此处声明存储库供您参考:

package hello;
import java.util.List;
import org.springframework.data.repository.CrudRepository;

public interface CustomerRepository extends CrudRepository<Customer, Long> {
    List<Customer> findByLastName(String lastName);
}
当它运行时,它看起来像是在默认情况下,它正在使用默认的hibernate持久性信息构建一个JPA容器,并且运行良好

但是,当我决定使用此代码作为基线并将CustomerRepository移动到另一个包jpa时,我就无法将存储库自动连接到应用程序中

将@ComponentScan(“jpa”)添加到应用程序无助于:

.NoSuchBeanDefinitionException:没有[jpa.CustomerRepository]类型的合格bean

将@EnableJpaRepositories(“jpa”)添加到应用程序会产生不同的错误:

IllegalArgumentException:不是托管类型:类jpa.Customer

因此,只要所有相关类都在同一个包中,我就可以使用JPA/Hibernate/H2进行非常简单的配置


我的问题是,当我想将东西移动到不同的包中时,是否需要立即转向更复杂的配置,或者保留这种极简主义,但仍然能够将事物分开。

最简单的方法是将
应用程序
类保留在包层次结构的根包中,并将其他类移动到子包中

org.example
     |
      --- Application.java
     |
      --- jpa
     |   |
     |    --- CustomerRepository.java
     |
      --- model
         |
          --- Customer.java
或者,如果希望每个类都包含在自己的子包中,例如:

org.example
     |
      --- bootstrap
     |   |
     |    --- Application.java
     |
      --- jpa
     |   |
     |    --- CustomerRepository.java
     |
      --- model
         |
          --- Customer.java
您还需要使用
@EntityScan

@SpringBootApplication
@EnableJpaRepositories("org.example.jpa")
@EntityScan("org.example.model")
public class Application ...

有关详细信息,请参阅。

最简单的方法是将
应用程序
类保留在包层次结构的根包中,并将其他类移动到子包中

org.example
     |
      --- Application.java
     |
      --- jpa
     |   |
     |    --- CustomerRepository.java
     |
      --- model
         |
          --- Customer.java
或者,如果希望每个类都包含在自己的子包中,例如:

org.example
     |
      --- bootstrap
     |   |
     |    --- Application.java
     |
      --- jpa
     |   |
     |    --- CustomerRepository.java
     |
      --- model
         |
          --- Customer.java
您还需要使用
@EntityScan

@SpringBootApplication
@EnableJpaRepositories("org.example.jpa")
@EntityScan("org.example.model")
public class Application ...

有关详细信息,请参阅。

我也对这个问题感到困惑。我在spring.io网站上找到了一些东西。它被描述为@manish,与你分享

默认情况下,Spring Boot将启用JPA存储库支持,并查看@SpringBootApplication所在的包(及其子包)。如果配置中的JPA存储库接口定义位于不可见的包中,则可以使用@EnableJpaRepositories及其类型安全的basePackageClasses=MyRepository.class参数指出备用包


我也对这个问题感到困惑。我在spring.io网站上找到了一些东西。它被描述为@manish,与你分享

默认情况下,Spring Boot将启用JPA存储库支持,并查看@SpringBootApplication所在的包(及其子包)。如果配置中的JPA存储库接口定义位于不可见的包中,则可以使用@EnableJpaRepositories及其类型安全的basePackageClasses=MyRepository.class参数指出备用包


谢谢Manish,如果我想将存储库移动到应用程序类包层次结构之外的自己的包中,我是否被迫手动配置hibernate?我想知道为什么?我试图找到文档来解释这一点,但我遇到了麻烦。您要查找的内容肯定可以使用
@ComponentScan
,尽管我个人认为不将引导类保留在子包中是个坏主意。无论如何,看看更新后的答案。谢谢Manish,如果我想将存储库移动到应用程序类包层次结构之外的自己的包中,我是否被迫手动配置hibernate?我想知道为什么?我试图找到文档来解释这一点,但我遇到了麻烦。您要查找的内容肯定可以使用
@ComponentScan
,尽管我个人认为不将引导类保留在子包中是个坏主意。无论如何,看看更新后的答案。您需要添加
@EnableJpaRepositories(“jpa”)
@EntityScan(“jpa”)
。默认情况下,spring引导扫描当前包,包括所有子包。因此,移动到
hello.jpa
仍然会检测到这些类。但是,当您将它移到
hello
包之外时,您需要手动配置它(或者将
应用程序
移到一个更高的包中,该包包含
hello
jpa
,我建议您这样做)。您需要同时添加
@EnableJpaRepositories(“jpa”)
@EntityScan(“jpa”)
。默认情况下,spring引导扫描当前包,包括所有子包。因此,移动到
hello.jpa
仍然会检测到这些类。但是,当您将其移动到
hello
包之外时,您需要手动配置它(或者将
应用程序
移动到一个更高的包中,该包包含
hello
jpa
,我建议您这样做)。