我使用 Java、Spring Boot、Hibernate 和 Lombok 作为带有 PostgreSQL 数据库的 Maven 项目。 它曾经可以工作,但是在我的下一次更改之后,休眠无法自动创建表到数据库。 我尝试的是:
spring.jpa.hibernate.ddl-auto=update
至
spring.jpa.hibernate.ddl-auto=create
但对我来说没有任何作用。我不知道会发生什么。
当我启动服务器时,位置表不会在我的数据库中创建,但是当我键入时
FROM pg_stat_activity
WHERE pg_stat_activity.datname = 'comparator' AND pid <> pg_backend_pid();
服务器启动后有4个连接,所以应该可以工作。
应用程序属性:
spring.datasource.url = ${SPRING_DATASOURCE_URL}
spring.datasource.username = ${SPRING_DATASOURCE_USERNAME}
spring.datasource.password = ${SPRING_DATASOURCE_PASSWORD}
spring.jpa.open-in-view=false
spring.jpa.hibernate.ddl-auto=update
pom.xml
<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 https://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>3.2.1</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>pl.comparator.renting.car</groupId>
<artifactId>comparator</artifactId>
<version>0.0.2-SNAPSHOT</version>
<name>comparator</name>
<description>Car Renting Comparator Web App</description>
<properties>
<java.version>17</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<exclusions>
<!-- exclude built in spring boot logging as we use log4j2 -->
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- logging dependencies -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.19.0</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.19.0</version>
</dependency>
<!-- database dependencies -->
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.7.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>jakarta.persistence</groupId>
<artifactId>jakarta.persistence-api</artifactId>
<version>3.1.0</version>
</dependency>
<!-- entity dependencies -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.30</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>8.0.1.Final</version>
</dependency>
<!-- testing dependencies -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.10.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>5.8.0</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
比较器应用
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import java.lang.invoke.MethodHandles;
@SpringBootApplication
public class ComparatorApplication {
private static final Logger log = LogManager.getLogger(MethodHandles.Lookup.class);
public static void main(String[] args) {
SpringApplication.run(ComparatorApplication.class, args);
log.info("Testing log which informs that Comparator Application has started successfully.");
}
}
位置.java
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Pattern;
import jakarta.validation.constraints.Size;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import java.util.Objects;
@Entity
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class Location {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@Size(min = 2, max = 50, message = "City name should be between 2 and 50 characters")
@NotBlank(message = "City name cannot be empty")
private String city;
@Pattern(regexp = "^\\d{2}-\\d{3}$", message = "Invalid zip code format")
private String zipCode;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Location location = (Location) o;
return getId() == location.getId() && Objects.equals(getCity(), location.getCity()) && Objects.equals(getZipCode(), location.getZipCode());
}
@Override
public int hashCode() {
return Objects.hash(getId(), getCity(), getZipCode());
}
}
控制台运行日志:
"
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v3.2.1)
00:00:27.266 [background-preinit] INFO org.hibernate.validator.internal.util.Version - HV000001: Hibernate Validator 8.0.1.Final
00:00:27.325 [main] INFO comparator.configuration.ComparatorApplication - Starting ComparatorApplication using Java 17 with PID 4688
00:00:27.332 [main] INFO comparator.configuration.ComparatorApplication - No active profile set, falling back to 1 default profile: "default"
00:00:28.016 [main] INFO org.springframework.data.repository.config.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode.
00:00:28.037 [main] INFO org.springframework.data.repository.config.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 4 ms. Found 0 JPA repository interfaces.
00:00:28.575 [main] INFO org.springframework.boot.web.embedded.tomcat.TomcatWebServer - Tomcat initialized with port 8080 (http)
sty 10, 2024 12:00:28 AM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["http-nio-8080"]
sty 10, 2024 12:00:28 AM org.apache.catalina.core.StandardService startInternal
INFO: Starting service [Tomcat]
sty 10, 2024 12:00:28 AM org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet engine: [Apache Tomcat/10.1.17]
sty 10, 2024 12:00:28 AM org.apache.catalina.core.ApplicationContext log
INFO: Initializing Spring embedded WebApplicationContext
00:00:28.653 [main] INFO org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 1256 ms
SLF4J: No SLF4J providers were found.
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See https://www.slf4j.org/codes.html#noProviders for further details.
00:00:28.896 [main] INFO org.hibernate.Version - HHH000412: Hibernate ORM core version 6.4.1.Final
00:00:28.932 [main] INFO org.hibernate.cache.internal.RegionFactoryInitiator - HHH000026: Second-level cache disabled
00:00:29.167 [main] INFO org.springframework.orm.jpa.persistenceunit.SpringPersistenceUnitInfo - No LoadTimeWeaver setup: ignoring JPA class transformer
00:00:29.800 [main] INFO org.hibernate.engine.transaction.jta.platform.internal.JtaPlatformInitiator - HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration)
00:00:29.805 [main] INFO org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default'
sty 10, 2024 12:00:30 AM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-nio-8080"]
00:00:30.229 [main] INFO org.springframework.boot.web.embedded.tomcat.TomcatWebServer - Tomcat started on port 8080 (http) with context path ''
00:00:30.248 [main] INFO comparator.configuration.ComparatorApplication - Started ComparatorApplication in 3.311 seconds (process running for 4.027)
00:00:30.251 [main] INFO java.lang.invoke.MethodHandles.Lookup - Testing log which informs that Comparator Application has started successfully.