2017-06-07 122 views
1

這裏我添加了我的代碼。當我嘗試讀取表的列表時,問題發生在try塊中。如何使用HibernateDaoSupport獲取數據庫中的表的列表?

數據庫是MySql
例外是:java.lang.IllegalArgumentException:要遍歷的節點不能爲null!

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'"); 
+0

try塊出現什麼問題? – Markus

+0

java.lang.IllegalArgumentException:要遍歷的節點不能爲null! –

+0

請將此信息添加到問題中,理想情況下包括堆棧跟蹤。 – Markus

回答

0

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(); 
      ... 
     }  
+0

請給我看從hibernatetemplate獲取會話的代碼。 –

相關問題