[Spring Boot 2] Configurazione DB con JPA

di il
4 risposte

[Spring Boot 2] Configurazione DB con JPA

Sto usando JPA in Spring Boot 2 e vi vorrei fare alcune domande.
Questa è la mia configurazione:
<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-jdbc</artifactId>
			<version>5.2.1.RELEASE</version>
		</dependency>

		<dependency>
			<groupId>org.postgresql</groupId>
			<artifactId>postgresql</artifactId>
			<version>42.2.8</version>
		</dependency>

spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect
spring.jpa.hibernate.ddl-auto=create
spring.jpa.hibernate.show-sql=true
spring.datasource.url=jdbc:postgresql://127.1.1.1:5432/postgres
spring.datasource.username=postgres
spring.datasource.password=password
1) Se scrivo 'spring.jpa.hibernate.ddl-auto=create' ogni volta che avvio l'applicazione su IntelliJ il mio DB viene azzerato. In produzione userò quindi 'spring.jpa.hibernate.ddl-auto=none'. Nella documentazione c'è scritto che 'spring.jpa.hibernate.show-sql=true' crea il dump ma non capisco bene che significa. Il dump ovvero l'export del database si fa da pgAdmin 4, non da Java!?!?
Nella mia applicazione butto dentro il db i seguenti dati:

package com.example.RestSpring;

import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;

@SpringBootApplication
public class Application {
	@Bean
	public CommandLineRunner initDB(final PersonRepository repo){
		return new CommandLineRunner() {
			@Override
			public void run(String... args) throws Exception {
				repo.save(new Person("Mario","Rossi"));
				repo.save(new Person("Andrea","Bianchi"));
				repo.save(new Person("Laura","Verdi"));
			}
		};
	}


	public static void main(String[] args) {
		SpringApplication.run(Application.class, args);
	}

}
2) C'è modo di buttare dentro il DB quei dati solo se inesistenti? In pratica vorrei usare già in fase di produzione 'spring.jpa.hibernate.ddl-auto=none'. Se uso 'none' ogni volta che premo su run vengono aggiunti quei dati. Io vorrei creare con JPA uno scheda del DB + una serie di utenti. Nella mia applicazione ci saranno solo 3 utenti. Qual'è il modo giusto per fare ciò?

4 Risposte

  • Re: [Spring Boot 2] Configurazione DB con JPA

    giannino1995 ha scritto:


    Questa è la mia configurazione:
    <dependency>
    			<groupId>org.springframework</groupId>
    			<artifactId>spring-jdbc</artifactId>
    			<version>5.2.1.RELEASE</version>
    		</dependency>
    
    		<dependency>
    			<groupId>org.postgresql</groupId>
    			<artifactId>postgresql</artifactId>
    			<version>42.2.8</version>
    		</dependency>
    
    Prima questione: hai solo postato un pezzo del pom, quindi non si vede/capisce molto. Hai usato oppure no lo "starter" specifico di JPA:
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    ?? E se no, c'è un motivo specifico per cui non l'hai usato?
  • Re: [Spring Boot 2] Configurazione DB con JPA

    Ti invio il pom.xml completo:
    
    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    
    
    	<modelVersion>4.0.0</modelVersion>
    	<parent>
    		<groupId>org.springframework.boot</groupId>
    		<artifactId>spring-boot-starter-parent</artifactId>
    		<version>2.2.0.M4</version>
    		<relativePath/> 
    	</parent>
    
    	<groupId>Progetti RestSpring</groupId>
    	<artifactId>Esercitazione.3.Spring</artifactId>
    	<version>1.0</version>
    	<packaging>war</packaging>
    	<name>Esercitazione.3.Spring</name>
    	<description>Esercitazione 3 con Spring Boot</description>
    
    	<properties>
    		<java.version>12</java.version>
    	</properties>
    
    	<dependencies>
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-data-jpa</artifactId>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-data-rest</artifactId>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-hateoas</artifactId>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-web</artifactId>
    		</dependency>
    
    		<dependency>
    			<groupId>org.springframework</groupId>
    			<artifactId>spring-jdbc</artifactId>
    			<version>5.2.1.RELEASE</version>
    		</dependency>
    
    		<dependency>
    			<groupId>org.postgresql</groupId>
    			<artifactId>postgresql</artifactId>
    			<version>42.2.8</version>
    		</dependency>
    
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-tomcat</artifactId>
    			<scope>provided</scope>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-test</artifactId>
    			<scope>test</scope>
    			<exclusions>
    				<exclusion>
    					<groupId>org.junit.vintage</groupId>
    					<artifactId>junit-vintage-engine</artifactId>
    				</exclusion>
    				<exclusion>
    					<groupId>junit</groupId>
    					<artifactId>junit</artifactId>
    				</exclusion>
    			</exclusions>
    		</dependency>
    	</dependencies>
    
    	<build>
    		<plugins>
    			<plugin>
    				<groupId>org.springframework.boot</groupId>
    				<artifactId>spring-boot-maven-plugin</artifactId>
    			</plugin>
    		</plugins>
    	</build>
    
    	<repositories>
    		<repository>
    			<id>spring-milestones</id>
    			<name>Spring Milestones</name>
    			<url>https://repo.spring.io/milestone</url>
    		</repository>
    	</repositories>
    	<pluginRepositories>
    		<pluginRepository>
    			<id>spring-milestones</id>
    			<name>Spring Milestones</name>
    			<url>https://repo.spring.io/milestone</url>
    		</pluginRepository>
    	</pluginRepositories>
    
    </project>
    
    Si uso JPA, nel testo dell'esercitazione c'è scritto di usare quello. C'è anche la parola Hibernate ma non capisco quale sia la differenza tra Hibernate e JPA. In ogni caso c'è molta libertà, si possono usare un po' gli strumenti che si vogliono purché siano validi. L'unico obbligo è quello di usare Spring Boot 2 e creare un'applicazione di tipo REST. Ti ho mandato l'esercitazione completa in privato (qui sul forum non riesco a caricarla).
  • Re: [Spring Boot 2] Configurazione DB con JPA

    giannino1995 ha scritto:


    Ti invio il pom.xml completo:
    Ma giusto per capire: il pom l'hai scritto tutto tu? L'hai scopiazzato da internet? Te lo ha fornito qualcuno?

    Innanzitutto non vedo perché devi andare a prendere le milestone (che non si trovano sul Maven Central ma sul repo specifico di Spring).

    giannino1995 ha scritto:


    non capisco quale sia la differenza tra Hibernate e JPA.
    JPA è una specifica, Hibernate è una implementazione di JPA (+ sue cose "proprietarie").

    giannino1995 ha scritto:


    Ti ho mandato l'esercitazione completa in privato (qui sul forum non riesco a caricarla).
    Appena posso, vedo.
  • Re: [Spring Boot 2] Configurazione DB con JPA

    Ho usato start.spring.io e ho creato il pom base per la creazione dell'applicazione rest, h2 incluso, poi ho sostituito h2 con postgresql. Il codice jpa l'ho scritto io, il bean per inserire i dati pure ma è tutta roba che ho letto qua e la, non mi sono inventato nulla.
Devi accedere o registrarti per scrivere nel forum
4 risposte