Spring Boot中@Entity注解失效,H2数据库未生成对应数据表
问题:配置H2数据库后未自动生成User表
我是Spring Boot新手,跟着YouTube教程配置H2数据库后,已经在User.java里加了@Entity和@Id注解,但H2控制台里始终看不到带id和name字段的User表,重复操作也没用,求指出遗漏的配置或步骤。
相关代码文件
Application.java
package com.example.demo; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class DbApplication { public static void main(String[] args) { SpringApplication.run(DbApplication.class, args); } }
User.java
package com.example.demo; import jakarta.persistence.Entity; import jakarta.persistence.Id; @Entity public class User { @Id private int id; private String name; public String toString() { return name+ " : " + id ; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
UserController.java
package com.example.demo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.servlet.ModelAndView; @Controller public class UserController { @Autowired UserDAO userdao; @RequestMapping("index") public String user() { return "index.jsp"; } @RequestMapping("addUser") public String addUser(User user) { userdao.save(user); return "index.jsp"; } @RequestMapping("getUser") public ModelAndView getUser(@RequestParam int id) { ModelAndView mav = new ModelAndView("showUser.jsp"); User user = userdao.findById(id).orElse(null); mav.addObject(user); return mav; } }
application.properties
spring.h2.console.enabled= true spring.datasource.platform= h2 spring.datasource.url=jdbc:h2:mem:testdb
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>3.0.5</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.manigandan</groupId> <artifactId>DB</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging> <name>DB</name> <description>demo website</description> <properties> <java.version>17</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-tomcat</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.apache.tomcat</groupId> <artifactId>tomcat-jasper</artifactId> <version>10.1.7</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
解决步骤
1. 添加JPA自动建表配置
在application.properties中加入以下配置,让Hibernate自动根据实体类生成/更新表结构:
spring.jpa.hibernate.ddl-auto=update
开发环境也可以用create(每次启动重建表),但update更适合持续开发场景。
2. 补全UserDAO接口定义
代码中注入了UserDAO但未提供实现,需要创建继承自JpaRepository的接口:
package com.example.demo; import org.springframework.data.jpa.repository.JpaRepository; public interface UserDAO extends JpaRepository<User, Integer> { }
没有这个接口,Spring无法识别持久层操作,也会影响实体类扫描和表生成。
3. 确认H2控制台连接参数
打开H2控制台时,确保JDBC URL与application.properties中的spring.datasource.url完全一致(jdbc:h2:mem:testdb),否则会连接到不同的内存数据库,自然看不到表。
4. 触发数据库操作
JPA可能会延迟初始化表,直到第一次执行数据库操作。启动项目后,调用addUser接口插入一条数据,再去H2控制台查看,表应该会生成。
5. 验证实体类扫描范围
@SpringBootApplication默认扫描当前包及其子包,你的User类与DbApplication同属com.example.demo包,这部分没问题。如果实体类在其他包,需在DbApplication上添加@EntityScan("你的实体类包路径")。
内容的提问来源于stack exchange,提问作者Manigandan R
相关产品推荐
相关产品推荐

