为什么Hibernate总是会丢弃数据库,即使我使用'验证'?

时间:2016-01-18 10:31:47

标签: mysql sql hibernate validation

我有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:表' todoitem'已存在

3 个答案:

答案 0 :(得分:0)

如果已存在,您已写入查询以删除该表。因此,它总是删除并再次创建表。因此,如果表已经存在,我们不需要删除。

This可能有助于检查已存在的表格是否存在。

答案 1 :(得分:0)

首先,每次重新启动应用程序时,如果每次运行此文件,那么肯定会删除所有数据。

DROP TABLE IF EXISTS ToDoItem;

首先删除数据然后重新创建

CREATE TABLE 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

如果存在,则验证否则创建

答案 2 :(得分:0)

你接缝使用MySql - 在这种情况下你可以使用crete if not exists,不需要删除:

CREATE IF NOT EXISTS TABLE ToDoItem (
  id BIGINT NOT NULL AUTO_INCREMENT,
  title varchar(500) NOT NULL,
  PRIMARY KEY (id)
);