gpt4 book ai didi

java - 如何使用 HibernateDaoSupport 获取数据库中的表列表?

转载 作者:太空宇宙 更新时间:2023-11-04 11:25:41 25 4
gpt4 key购买 nike

这里我添加了我的代码。当我尝试获取表列表时,try block 中出现问题。

数据库是MySql
异常是:java.lang.IllegalArgumentException:要遍历的节点不能为空!

public class DBOptimizationDAO extends HibernateDaoSupport {

private static final Log log = LogFactory.getLog(DBOptimizationDAO.class);

public void optimizeAdapter(String year)
{
List<com.ecw.adapterservice.beans.TransactionInbound> transactionInboundList = null;
StringBuilder queries = new StringBuilder();
try {
transactionInboundList = (List<com.ecw.adapterservice.beans.TransactionInbound>)super.getHibernateTemplate().find("from TransactionInbound where inboundTimestamp < '" + year+ "-01-01'order by 1 desc limit 2");

// Check if archive table exist or not
List<Object> inboundObj = getHibernateTemplate().find("SHOW TABLES LIKE transaction_outbound");
List<Object> outboundObj = getHibernateTemplate().find("SHOW TABLES LIKE 'transaction_outbound_archive'");

最佳答案

HibernateTemplate::find 需要字符串参数中的 HQL 查询,并且您正在传递 native 语句。您可以使用 HibernateTemplate::getSession 返回的 Session 对象执行 native 操作(查询、语句等)。 。要传递 native 选择查询,您需要 Session::createSQLQuery

但是您真的想依赖数据库特定代码来执行此操作吗?有一种更优雅的方式来做到这一点,即使用 DatabaseMetaData::getTables 。请参阅this answer 。您可以获得 DatabaseMetaData from a callback method of your HibernateTemplate 的实例.

试试这个:

        Session session = getHibernateTemplate().getSessionFactory().getCurrentSession();
if(!session instaceof SessionImpl){
//handle this, maybe throw an exception
}
else {
Connection con = (SessionImpl)session.connection();
...
}

关于java - 如何使用 HibernateDaoSupport 获取数据库中的表列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44404884/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com