首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么Hibernate总是删除DB中的数据,即使我使用了“验证”?

问为什么Hibernate总是删除DB中的数据,即使我使用了“验证”?
EN

Stack Overflow用户
提问于 2016-01-18 10:31:47
回答 3查看 201关注 0票数 1

我有Java项目,在application.properties文件中有:

代码语言:javascript
复制
spring.jpa.hibernate.ddl-auto=validate
spring.datasource.schema=classpath:/data/hsqldb/schema.sql
spring.datasource....
...

在data/hsqldb/schema.sql中,我有一个简单的表:

代码语言:javascript
复制
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’已经存在了

EN

回答 3

Stack Overflow用户

发布于 2016-01-18 10:43:54

如果已经存在,您已经编写了删除表的查询。因此,它总是删除并再次创建表。因此,如果表已经存在,则不需要删除。

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

票数 0
EN

Stack Overflow用户

发布于 2016-01-18 10:45:36

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

如果存在ToDoItem,则删除表;

首先删除数据,然后再创建数据。

创建表ToDoItem (

首先检查一下表,例如:

代码语言:javascript
复制
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

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

票数 0
EN

Stack Overflow用户

发布于 2016-01-18 10:49:02

您可以接缝使用MySql --在这种情况下,您可以使用crete if not exists,而无需添加:

代码语言:javascript
复制
CREATE IF NOT EXISTS TABLE ToDoItem (
  id BIGINT NOT NULL AUTO_INCREMENT,
  title varchar(500) NOT NULL,
  PRIMARY KEY (id)
);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34852524

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档