使用@Entity注释后,不会自动在h2数据库中创建表。有什么问题吗?我进行了故障排除并尝试了其他方式,但是不会自动创建。
我的模特是:
@Entity
public class UserAccount {
@Id
@GeneratedValue
private int id;
private String userName;
private String email;
@Temporal(TemporalType.DATE)
private Date dateCreated;
private Set <Transaction> transactions = new HashSet<>();
我的h2配置详细信息是:
spring.h2.console.enabled=true
spring.datasource.platform=h2
spring.datasource.url=jdbc:h2:mem:test
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.jpa.hibernate.ddl-auto=create
我的pom.xml文件是:
<?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 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>2.1.9.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.Wallet</groupId>
<artifactId>Wallet</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>Wallet</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</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-web</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
请帮助我被卡住,我的代码可能出什么问题了?
答案 0 :(得分:0)
@Entity
:将类定义为ORM的实体,并且提供的名称可用于ORM特定的查询(JPQL,HSQL)。
@Table
:这将与数据库中的单个表映射。因此,如果您编写任何本机查询,则可以使用此表名。 (这是ORM的入口点)
请注意,您可以为任何一个注释保留不同的名称属性。框架负责从一个到另一个的映射和转换。
为了请求Spring代表您创建表,您可以在application.yml文件(或属性文件)中指定一些属性。见下文:
spring:
datasource:
url: jdbc:h2:file:./test_db;DB_CLOSE_ON_EXIT=FALSE;IFEXISTS=FALSE;DB_CLOSE_DELAY=-1
driverClassName: org.h2.Driver
username: sa
password:
validationQuery: SELECT 1
jpa:
database-platform: org.hibernate.dialect.H2Dialect
hibernate:
ddl-auto: create
// If you want to view the tables in console
h2:
console:
enabled: true
path: /h2-console
除此之外,还可以指定许多其他属性。 例如:
spring:
jpa:
hibernate:
naming:
physical-strategy: org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy
implicit-strategy: org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy
properties:
hibernate.format_sql: true
generate-ddl: true
show-sql: true
另外,请参见Spring Boot中的数据库initialization。
您可以像在生产中一样使用Flyway进行数据库迁移,不建议使用这些属性创建模式。