java - Hibernate 无法在 MySql 数据库中创建表
问题描述
我正在尝试使用 Hibernate 在数据库中保存一些东西。这是我尝试这样做的方法:
MyEvent event = new MyEvent();
event.setEventName("Sample event!!!");
Configuration configuration = new Configuration().configure();
SessionFactory sessionFactory = configuration.buildSessionFactory();
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
session.save(event);
session.flush();
transaction.commit();
session.close();
sessionFactory.close();
这是我的实体类:
@Entity
public class MyEvent {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String eventName;
public MyEvent() {
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getEventName() {
return eventName;
}
public void setEventName(String eventName) {
this.eventName = eventName;
}
}
这是我的配置文件(资源目录下的hibernate.cfg.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:8877/hibernate_db</property>
<property name="hibernate.connection.username">hiber</property>
<property name="hibernate.connection.password">root</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.hbm2ddl.auto">create</property>
<property name="hibernate.show_sql">true</property>
<mapping class="com.smola.MyEvent"/>
</session-factory>
</hibernate-configuration>
以下是我的 pom.xml 的依赖项:
<dependencies>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>6.14.3</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.46</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.3.6.Final</version>
</dependency>
</dependencies>
Mysql 在 Docker 容器中运行。下面是 docker-compose 文件的样子:
version: "3"
services:
db:
image: mysql:5.7
restart: always
environment:
- MYSQL_ROOT_PASSWORD=root
- MYSQL_DATABASE=hibernate_db
- MYSQL_USER=hiber
- MYSQL_PASSWORD=root
ports:
- 8877:3306
当我手动创建表并将 hibernate.hbm2ddl.auto 属性更改为更新时,它可以工作。
我想自动创建表。我可以连接到数据库,所以这不是 Docker 的问题。我应该改变什么?错误通信如下所示:
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'hibernate_db.MyEvent' doesn't exist
解决方案
使用 Spring Data 摆脱所有配置问题
推荐阅读
- css - 为什么顺风 css 类名中有反斜杠?
- json - 匹配两个Json响应时忽略一个键
- tex - 如何在多行闭括号内居中数学表达式?
- django-rest-framework - Django Rest Framework 文档嵌套序列化程序
- batch-file - 在for循环中获取目录的最后一部分,使用cd,并在一行中
- c++ - DLL 导出类:抽象基类和 pimpl?
- amazon-web-services - AWS:有没有办法暂停/取消暂停 Elastic LoadBalancers 的流量?
- reactjs - ReactJs - Axios - 如何获取分段文件上传进度
- python - Scrapy ModuleNotFoundError:没有名为“MySQLdb”的模块
- trustpilot - 使用 api 获取 Trustpilot 评论时出错