【问题标题】:How to fetch list of tables in database using HibernateDaoSupport?如何使用 HibernateDaoSupport 获取数据库中的表列表?
【发布时间】:2017-06-07 06:16:37
【问题描述】:

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

数据库是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'");

【问题讨论】:

  • try 块出现什么问题?
  • java.lang.IllegalArgumentException: 要遍历的节点不能为空!
  • 请将此信息添加到问题中,最好包括堆栈跟踪。
  • 当然,伙计。现在让我们专注于问题。
  • 请考虑阅读以改善您的问题:stackoverflow.com/help/how-to-ask 我只是想帮助您改善您的问题。 stackoverflow.com/help/mcve 也有帮助。

标签: java spring hibernate dao


【解决方案1】:

HibernateTemplate::find 需要字符串参数中的 HQL 查询,并且您传递的是本机语句。您可以使用HibernateTemplate::getSession 返回的Session 对象来执行本机操作(查询、语句等)。要传递本机选择查询,您需要 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();
            ...
        }       

【讨论】:

  • 请告诉我从hibernatetemplate获取会话的代码。
猜你喜欢
  • 2010-10-10
  • 2011-09-29
  • 2022-01-20
  • 1970-01-01
  • 1970-01-01
  • 2011-09-03
  • 1970-01-01
  • 1970-01-01
  • 2021-12-04
相关资源
最近更新 更多