我正在尝试在Spring启动项目中为H2数据库创建表。
模型类:
package model;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
@Entity
public class Author {
/* (non-Javadoc)
* @see java.lang.Object#toString()
*/
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private long id;
/**
* @return the id
*/
public long getId() {
return id;
}
/**
* @param id the id to set
*/
public void setId(long id) {
this.id = id;
}
@Override
public String toString() {
return "Author [firstName=" + firstName + ", lastName=" + lastName + ", books=" + books + "]";
}
private String firstName;
/**
* @return the firstName
*/
public String getFirstName() {
return firstName;
}
/* (non-Javadoc)
* @see java.lang.Object#hashCode()
*/
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + (int) (id ^ (id >>> 32));
return result;
}
/* (non-Javadoc)
* @see java.lang.Object#equals(java.lang.Object)
*/
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Author other = (Author) obj;
if (id != other.id)
return false;
return true;
}
/**
* @param firstName the firstName to set
*/
public void setFirstName(String firstName) {
this.firstName = firstName;
}
private String lastName;
/**
* @return the lastName
*/
public String getLastName() {
return lastName;
}
/**
* @param lastName the lastName to set
*/
public void setLastName(String lastName) {
this.lastName = lastName;
}
@ManyToMany(mappedBy="author")
private Set<Book>books=new HashSet<>();
/**
* @return the books
*/
public Set<Book> getBooks() {
return books;
}
/**
* @param books the books to set
*/
public void setBooks(Set<Book> books) {
this.books = books;
}
public Author() {}
public Author(String firstName, String lastName) {
super();
this.firstName = firstName;
this.lastName = lastName;
}
public Author(String firstName, String lastName, Set<Book> books) {
super();
this.firstName = firstName;
this.lastName = lastName;
this.books = books;
}
}
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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>demo</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.3.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>10</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</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>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-commons-core</artifactId>
<version>1.4.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
应用程序属性:
spring.h2.console.enabled=true
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.username=sa
spring.datasource.password=
spring.datasource.driver-class-name=org.h2.Driver
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
到H2数据库的连接日志:
er : Located MBean 'dataSource': registering with JMX server as MBean [com.zaxxer.
hikari:name=dataSource,type=HikariDataSource]
2018-07-26 08:20:35.146 INFO 10708 --- [ restartedMain] o.s.b.w.embedded.tomcat.TomcatW
ebServer : Tomcat started on port(s): 8080 (http) with context path ''
2018-07-26 08:20:35.146 INFO 10708 --- [ restartedMain] com.example.demo.DemoApplicatio
n : Started DemoApplication in 8.807 seconds (JVM running for 9.771)
h2数据库中没有表,我整天都在搜索该问题,但是所有结果都返回到配置应用程序属性并将h2控制台更改为jdbc:h2:mem:testdb
上。我已经尝试了所有这些,但没有任何变化。
答案 0 :(得分:0)
您必须在属性文件中添加
spring.jpa.hibernate.ddl-auto=create
通过这种方式休眠将创建表
答案 1 :(得分:0)
您是否正在扫描实体包裹? (即package model
)?
如果您不扫描实体包,则在主类的下面添加一行。
@ComponentScan(basePackages= {"model"});
希望这可以解决您的问题