我有Java项目,在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如果存在ToDoItem‘行,但是在本例中我得到了异常:todoitem表'todoitem’已经存在了
发布于 2016-01-18 10:43:54
如果已经存在,您已经编写了删除表的查询。因此,它总是删除并再次创建表。因此,如果表已经存在,则不需要删除。
这可能有助于检查是否存在已存在的表。
发布于 2016-01-18 10:45:36
首先,每次重新启动应用程序时,如果该文件每次运行,那么肯定会删除所有数据。
如果存在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如果存在,那么验证否则创建
发布于 2016-01-18 10:49:02
您可以接缝使用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)
);https://stackoverflow.com/questions/34852524
复制相似问题