我能够直接从网站{@ 3}}在我的机器上运行示例应用程序。
这个示例应用程序让您开始使用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);
}
此存储库已自动装配到配置中。所有文件都包含在同一个包/目录中。我假设spring非常聪明,可以实例化实现CustomerRepository的bean的正确实例,该实例提供与h2database的正确连接。我不确定这是怎么做到的,但它确实有效。
代码在这里:
package hello;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application implements CommandLineRunner {
@Autowired
CustomerRepository repository;
public static void main(String[] args) {
SpringApplication.run(Application.class);
}
}
当它运行时看起来默认情况下,它构建一个具有默认hibernate持久性信息的JPA容器,并且运行正常。
但是,当我决定使用此代码作为基线并将CustomerRepository移动到另一个包jpa时,我不再能够将存储库自动装入应用程序。
将@ComponentScan(&#34; jpa&#34;)添加到应用程序没有帮助:
.NoSuchBeanDefinitionException:没有[jpa.CustomerRepository]类型的限定bean
将@EnableJpaRepositories(&#34; jpa&#34;)添加到应用程序会产生不同的错误:
IllegalArgumentException:不是托管类型:class jpa.Customer
因此,只要所有相关类都在同一个包中,看起来我可以使用JPA / Hibernate / H2进行非常简约的配置。
我的问题是,当我想把东西搬到不同的包装中时,我是否必须立即转向更复杂的配置,或者是为了保持这种极简主义但仍然可以将事物分开。
答案 0 :(得分:3)
最简单的方法是将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 ...
有关详细信息,请参阅official documentation。
答案 1 :(得分:1)
我也对这个问题感到困惑。我在spring.io网站上找到了一些东西。它被描述为@manish,与你分享。
默认情况下,Spring Boot将启用JPA存储库支持并查看@SpringBootApplication所在的包(及其子包)。如果您的配置包含位于包中的JPA存储库接口定义,则可以使用@EnableJpaRepositories及其类型安全的basePackageClasses = MyRepository.class参数指出备用包。