---
title: 'Spring Boot JPA applications'
disqus: hackmd
---
###### tags: `SpringBoot`
Spring Boot JPA applications
===
[TOC]
## 了解update validation 等各式各樣註釋的差別
```
# spring.jpa.generate-ddl 控制ddl的開關 =false會關閉
# spring.jpa.hibernate.ddl-auto 指的是服務起來時要用何種方式執行ddl指令
# create – Hibernate first drops existing tables, then creates new tables
# update – the object model created based on the mappings (annotations or XML) is compared with the existing schema, and then Hibernate updates the schema according to the diff. It never deletes the existing tables or columns even if they are no more required by the application
# create-drop – similar to create, with the addition that Hibernate will drop the database after all operations are completed. Typically used for unit testing
# validate – Hibernate only validates whether the tables and columns exist, otherwise it throws an exception
spring.jpa.generate-ddl=true
spring.jpa.hibernate.ddl-auto=create-drop
spring.jpa.database-platform=org.hibernate.dialect.MySQL8Dialect
```
jpa是一种规范,但是对jpa支持最好的就是hibernate,所以一般来说jpa指的就是hibernate实现的jpa。
在使用springboot时,使用jpa,加上jpa的起步依赖spring-boot-starter-data-jpa即可。
在配置文件中除了配置数据源以外,还可以配置一些方便开发使用的选项,如spring.jpa.show-sql=true,这个属性可以在操作数据库时显示sql语句。
还有一个属性值比较常用:spring.jpa.hibernate.ddl-auto,其属性值作用区别介绍如下:
create:
每次加载hibernate时都会删除上一次的生成的表,然后根据你的model类再重新来生成新表,哪怕两次没有任何改变也要这样执行,这就是导致数据库表数据丢失的一个重要原因。
create-drop :
每次加载hibernate时根据model类生成表,但是sessionFactory一关闭,表就自动删除。
update:
最常用的属性,第一次加载hibernate时根据model类会自动建立起表的结构(前提是先建立好数据库),以后加载hibernate时根据 model类自动更新表结构,即使表结构改变了但表中的行仍然存在不会删除以前的行。要注意的是当部署到服务器后,表结构是不会被马上建立起来的,是要等 应用第一次运行起来后才会。
validate :
每次加载hibernate时,验证创建数据库表结构,只会和数据库中的表进行比较,不会创建新表,但是会插入新值。
————————————————
原文链接:https://blog.csdn.net/qq_36666651/article/details/80719259
## 要使用兩種資料庫的話
首先會有四個東西

1. Configuration
2. Entity
3. EntityPK
4. OuterRepository
5. innerRepository
Configuration
```java=
package Module.ComprehensiveServiceCenterRepositoryEntity.DataSource.YahooAdsData.Configuration;
import javax.persistence.EntityManagerFactory;
import javax.sql.DataSource;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
entityManagerFactoryRef = "YahooGeminiDataEntityManagerFactory",
transactionManagerRef = "YahooGeminiDataTransactionManager",
basePackages = {
"Module.ComprehensiveServiceCenterRepositoryEntity.DataSource.YahooAdsData.Repository"
}
)
public class YahooGeminiDataSourceConfiguration {
@Bean(name = "YahooGeminiDataSource")
@ConfigurationProperties(prefix = "spring.yahoogemini.datasource")
public DataSource YahooGeminiDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "YahooGeminiDataEntityManagerFactory")
public LocalContainerEntityManagerFactoryBean entityManagerFactory(EntityManagerFactoryBuilder builder, @Qualifier("YahooGeminiDataSource") DataSource dataSource) {
return builder.dataSource(dataSource).packages("Module.ComprehensiveServiceCenterRepositoryEntity.DataSource.YahooAdsData.Entity").persistenceUnit("YahooGeminiData")
.build();
}
@Bean(name = "YahooGeminiDataTransactionManager")
public PlatformTransactionManager YahooGeminiDataTransactionManager(@Qualifier("YahooGeminiDataEntityManagerFactory") EntityManagerFactory YahooGeminiDataEntityManagerFactory) {
return new JpaTransactionManager(YahooGeminiDataEntityManagerFactory);
}
}
```
https://matthung0807.blogspot.com/2019/09/spring-data-jpa-multiple-datasource.html