首页 > 解决方案 > 使用 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();,但他们给出了错误。

任何关于如何实现这一目标的建议都会有所帮助。

标签: javaspringhibernatejpa

解决方案


您可以通过休眠 hbm2ddl 函数来实现这一点。您可以将其设置为validate并在启动时休眠将检查生成的模式是否与数据库中的模式匹配。Hibernate hbm2ddl.auto 配置的可能值是什么,它们有什么作用 如果您想检查给定表中有多少行,您需要在 select statemant like 中执行计数SELECT COUNT(*) FROM TableName。像这里SQL count rows in a table


推荐阅读