我有 Java Spring 项目, 在 application.properties 文件中我有:
spring.jpa.hibernate.ddl-auto=validate
spring.datasource.schema=classpath:/data/hsqldb/schema.sql
spring.datasource....
...
在 data/hsqldb/schema.sql 中我有一个简单的表:
DROP TABLE IF EXISTS ToDoItem;
CREATE TABLE ToDoItem (
id BIGINT NOT NULL AUTO_INCREMENT,
title varchar(500) NOT NULL,
PRIMARY KEY (id)
);
我启动应用程序,在 ToDoItem 表中创建一些数据,但每次我重新启动应用程序时,它都会从该表中删除所有数据。 我希望 Hibernate 只是验证 DB 中的表结构,如果它没问题 - 不要触及数据。
顺便说一句,我试图注释掉 'DROP TABLE IF EXISTS ToDoItem' 行,但在这种情况下我得到了 Exception: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'todoitem' 已经存在
最佳答案
首先,每次您重新启动应用程序时,如果该文件每次都运行,那么它肯定会删除所有数据。
如果存在 ToDoItem,则删除表;
你先删除数据然后再创建它
创建表 ToDoItem (
首先检查表格:
IF (EXISTS (SELECT *
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'SchemaName'
AND TABLE_NAME = 'TableName'))
BEGIN
--some code
END
ELSE
BEGIN
-- Create table code
END
如果存在则验证否则创建
关于mysql - 为什么即使我使用 'validate' Hibernate 也总是丢弃数据库中的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34852524/