java@Entity注释未在h2数据库中自动生成表
@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>
请帮助我,我被卡住了,我的代码可能有什么问题
# 1 楼答案
其中一个原因可能是,如果您的实体类位于与主应用程序包完全不同的包中
这可能会阻止扫描您的实体。 因为没有扫描的实体,所以不会向数据库中插入任何表,这意味着您甚至不会看到任何明显的异常或错误消息
如果是这种情况,则应在主应用程序中使用@EntityScan注释。比如说
# 2 楼答案
@Entity
:将类定义为ORM的实体,提供的名称可用于ORM特定的查询(JPQL、HSQL)@Table
:这将映射到数据库中的单个表。因此,如果编写任何本机查询,可以使用此表名。(这是ORM的入口点)请注意,您可以为任一注释保留不同的名称属性。框架负责从一个到另一个的映射和转换
为了请求Spring代表您创建表,您可以在应用程序中指定一些属性。yml文件(或属性文件)。见下文:
除此之外,还有许多其他属性可以指定。 例如:
看看这里的docs和使用Spring Boot设置H2的一些example
另外,请参见Spring Boot中的数据库initialization
{/a4}建议您不要在生产迁移中使用这些属性