Vodič za JPA s proljećem

1. Pregled

Ovaj vodič pokazuje kako postaviti proljeće s JPA, koristeći Hibernate kao pružatelja trajnosti.

Za detaljni uvod o postavljanju proljetnog konteksta pomoću konfiguracije temeljene na Javi i osnovne Maven pom za projekt, pogledajte ovaj članak.

Počet ćemo s postavljanjem JPA u projektu Spring Boot, a zatim ćemo pogledati potpunu konfiguraciju koja nam je potrebna ako imamo standardni projekt Spring.

Evo videozapisa o postavljanju Hibernate 4 s Spring 4 (preporučujem ga gledanje u punoj 1080p):

2. JPA u Spring Boot-u

Projekt Spring Boot namijenjen je stvaranju Spring aplikacija mnogo brže i jednostavnije. To se postiže korištenjem pokretača i automatske konfiguracije za različite funkcionalnosti Springa, među njima i JPA.

2.1. Ovisnosti Mavena

Da bismo omogućili JPA u aplikaciji Spring Boot, potreban nam je opruga-čizma-starter i spring-boot-starter-data-jpa ovisnosti:

 org.springframework.boot spring-boot-starter 2.2.6.RELEASE org.springframework.boot spring-boot-starter-data-jpa 2.2.6.RELEASE 

The opruga-čizma-starter sadrži potrebnu automatsku konfiguraciju za Spring JPA. Također, opruga-čizma-starter-jpa projekt referencira sve potrebne ovisnosti kao što su hibernacija-jezgra.

2.2. Konfiguracija

Spring Boot konfigurira Hibernate kao zadani davatelj usluga JPA, tako da više nije potrebno definirati entityManagerFactory grah, osim ako ga ne želimo prilagoditi.

Spring Boot također može automatski konfigurirati izvor podataka bean, ovisno o bazi podataka koju koristimo. U slučaju baze podataka u memoriji tipa H2, HSQLDB, i Apache Derby, Boot automatski konfigurira Izvor podataka ako je na putu klase prisutna odgovarajuća ovisnost baze podataka.

Na primjer, ako želimo koristiti in-memory H2 bazu podataka u Spring Boot JPA aplikaciji, trebamo samo dodati h2 ovisnost o pom.xml datoteka:

 com.h2data baza podataka h2 1.4.200 

Na ovaj način, ne trebamo definirati izvor podataka grah, ali to možemo učiniti ako ga želimo prilagoditi.

Ako želimo koristiti JPA s MySQL baza podataka, tada nam treba mysql-konektor-java ovisnost, kao i za definiranje Izvor podataka konfiguracija.

To možemo učiniti u a @Konfiguracija klase ili pomoću standardnih svojstava Spring Boot.

Java konfiguracija izgleda isto kao i u standardnom projektu Spring:

@Bean public DataSource dataSource () {DriverManagerDataSource dataSource = novi DriverManagerDataSource (); dataSource.setDriverClassName ("com.mysql.cj.jdbc.Driver"); dataSource.setUsername ("mysqluser"); dataSource.setPassword ("mysqlpass"); dataSource.setUrl ("jdbc: mysql: // localhost: 3306 / myDb? createDatabaseIfNotExist = true"); vratiti dataSource; }

Da bismo konfigurirali izvor podataka pomoću datoteke svojstava, moramo postaviti svojstva s prefiksom proljeće.dataizvor:

spring.datasource.driver-class-name = com.mysql.cj.jdbc.Driver spring.datasource.username = mysqluser spring.datasource.password = mysqlpass spring.datasource.url = jdbc: mysql: // localhost: 3306 / myDb ? createDatabaseIfNotExist = true

Spring Boot automatski će konfigurirati izvor podataka na temelju ovih svojstava.

Također u Spring Boot 1, zadani spremište veze bilo je Mačak, ali s Spring Boot 2 promijenjen je u HikariCP.

Možete pronaći još primjera konfiguriranja JPA u Spring Boot u projektu GitHub.

Kao što vidimo, osnovna JPA konfiguracija prilično je jednostavna ako koristimo Spring Boot.

Međutim, ako imamo standardni projekt Spring, tada nam je potrebna eksplicitnija konfiguracija, koristeći Java ili XML. Na to ćemo se usredotočiti u sljedećim odjeljcima.

3. JPA proljetna konfiguracija s Javom - u projektu koji se ne pokreće

Da biste koristili JPA u proljetnom projektu, moramo postaviti EntityManager.

Ovo je glavni dio konfiguracije i to možemo učiniti putem tvorničkog zrna Spring. Ovo može biti jednostavnije LocalEntityManagerFactoryBean ili što je fleksibilniji LocalContainerEntityManagerFactoryBean.

Pogledajmo kako možemo koristiti potonju opciju:

@Configuration @EnableTransactionManagement javna klasa PersistenceJPAConfig {@Bean public LocalContainerEntityManagerFactoryBean entityManagerFactory () {LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean em.setDataSource (dataSource ()); em.setPackagesToScan (novi String [] {"com.baeldung.persistence.model"}); JpaVendorAdapter vendorAdapter = novi HibernateJpaVendorAdapter (); em.setJpaVendorAdapter (vendorAdapter); em.setJpaProperties (additionalProperties ()); vratiti ih; } // ...}

Također moramo izričito definirati Izvor podataka grah koristili smo gore:

@Bean public DataSource dataSource () {DriverManagerDataSource dataSource = novi DriverManagerDataSource (); dataSource.setDriverClassName ("com.mysql.cj.jdbc.Driver"); dataSource.setUrl ("jdbc: mysql: // localhost: 3306 / spring_jpa"); dataSource.setUsername ("tutorialuser"); dataSource.setPassword ("tutorialmy5ql"); vratiti dataSource; }

Završni dio konfiguracije su dodatna svojstva hibernacije i TransactionManager i iznimkaPrevod grah:

@Bean public PlatformTransactionManageractionManager () {JpaTransactionManageractionManager = new JpaTransactionManager (); actionManager.setEntityManagerFactory (entityManagerFactory (). getObject ()); vratiti transakcijuManager; } @Bean public PersistenceExceptionTranslationPostProcessor exceptionTranslation () {return new PersistenceExceptionTranslationPostProcessor (); } Svojstva additionalProperties () {Svojstva svojstva = nova svojstva (); properties.setProperty ("hibernate.hbm2ddl.auto", "create-drop"); svojstva.setProperty ("hibernate.dialect", "org.hibernate.dialect.MySQL5Dialect"); povrat svojstava; }

4. Konfiguracija JPA proljeća s XML-om

Dalje, pogledajmo istu proljetnu konfiguraciju s XML-om:

        create-drop org.hibernate.dialect.MySQL5Dialect 

Razmjerno je mala razlika između XML-a i nove konfiguracije zasnovane na Javi. Naime, u XML-u referenca na drugi grah može upućivati ​​ili na grah ili na tvornicu graha za taj grah.

U Javi, međutim, budući da su vrste različite, kompajler to ne dopušta, pa tako i EntityManagerFactory prvo se preuzima iz tvornice graha, a zatim prosljeđuje upravitelju transakcija:

actionManager.setEntityManagerFactory (entityManagerFactory (). getObject ());

5. Prelazak na puni XML

JPA obično definira jedinicu postojanosti putem META-INF / persistence.xml datoteka. Počevši od proljeća 3.1, postojanost.xml više nije potrebno. The LocalContainerEntityManagerFactoryBean sada podržava a paketiToScan svojstvo u kojem se paketi skeniraju @ Entitet klase se mogu odrediti.

Ova je datoteka bila posljednji dio XML-a koji moramo ukloniti. Sada možemo postaviti JPA u potpunosti bez XML-a.

Obično bismo specificirali JPA svojstva u postojanost.xml datoteka. Alternativno, svojstva možemo dodati izravno tvorničkom zrnu upravitelja entiteta:

factoryBean.setJpaProperties (this.additionalProperties ());

Kao popratnu napomenu, ako bi Hibernate bio pružatelj postojanosti, to bi bio način da se specificiraju i specifična svojstva hibernacije.

6. Konfiguracija Maven

Uz Spring Core i ovisnosti o postojanosti - detaljno prikažite u vodiču Spring with Maven - u projektu također moramo definirati JPA i Hibernate, kao i MySQL konektor:

 org.hibernate hibernate-core 5.2.17.Final runtime mysql mysql-connector-java 8.0.19 runtime 

Primijetite da je ovdje kao primjer uključena ovisnost MySQL. Treba nam pokretački program za konfiguriranje izvora podataka, ali bilo koja baza podataka podržana hibernacijom će učiniti.

7. Zaključak

Ovaj je vodič ilustrirao kako konfigurirati JPA s hibernacijom u proljeće i u Spring Boot i u standardnoj Spring opciji.

Kao i uvijek, kôd predstavljen u ovom članku dostupan je na GitHubu.