java - 使用 JPA+Hibernate 检查 Spring Boot 中是否存在表
问题描述
我正在尝试使用 JPA + Hibernate 在 Spring Boot 中创建一个自定义存储库。我是 JPA 和 Hibernate 的新手,所以到目前为止,我设法在数据库中创建了一个表并将一些数据推送到它。
我想知道在创建表之前是否存在表或表中的行数,但我无法在其上找到任何材料。
以下是创建表的类
package repository;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;
import org.springframework.stereotype.Repository;
@Repository
public class CustomRepository {
EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("TestPersistence");
public void createTable(String tableName) {
EntityTransaction txn = null;
try {
EntityManager entityManager = entityManagerFactory.createEntityManager();
txn = entityManager.getTransaction();
txn.begin();
entityManager.createNativeQuery("CREATE TABLE " + tableName + " (PersonID int, LastName varchar(255))")
.executeUpdate();
txn.commit();
} catch (Throwable e) {
if (txn != null && txn.isActive()) {
txn.rollback();
}
throw e;
}
}
}
我试过了
String sqlQuery = "SELECT COUNT (*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'my_table'";
或者
String sqlQuery = "SELECT TABLE_NAME, TABLE_ROWS FROM INFORMATION_SCHEMA.TABLES"
也有entityManager.createQuery(sqlQuery).getResultList();
,但他们给出了错误。
任何关于如何实现这一目标的建议都会有所帮助。
解决方案
您可以通过休眠 hbm2ddl 函数来实现这一点。您可以将其设置为validate
并在启动时休眠将检查生成的模式是否与数据库中的模式匹配。Hibernate hbm2ddl.auto 配置的可能值是什么,它们有什么作用
如果您想检查给定表中有多少行,您需要在 select statemant like 中执行计数SELECT COUNT(*) FROM TableName
。像这里SQL count rows in a table
推荐阅读
- reactjs - 在 reactjs 中创建新应用程序
- php - 在 Laravel 项目中未找到文件但已设置路径
- sql-server - 如何使用 PowerShell 安装这个缺失的 dll
- swift - 为什么我的字典没有被添加到我的数组中?indexPath.row 返回零
- java - javax:javaee-web-api 的 POM 无效,html 中的 POM 不是 xml
- javascript - 从树(如对象数组)中按路径添加子项或删除项
- c - 取消引用参数会创建它的本地副本吗?
- javascript - 使用javascript添加行的问题
- firebase - React Native Google Signin idToken null
- javascript - 把和数组变成一个对象