2016-11-24 39 views
0

我想使用Hibernate列出MySQL中的所有数据库。但是我得到了错误。HQL中的“显示数据库”Hibernate

Nov 24, 2016 11:50:27 AM org.hibernate.hql.internal.ast.ErrorCounter reportError 
ERROR: line 1:1: unexpected token: show 
Nov 24, 2016 11:50:27 AM org.hibernate.hql.internal.ast.ErrorCounter reportError 
ERROR: line 1:1: unexpected token: show 
line 1:1: unexpected token: show 
    at org.hibernate.hql.internal.antlr.HqlBaseParser.statement(HqlBaseParser.java:191) 
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:295) 
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:203) 
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:158) 
    at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:126) 
    at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:88) 
    at org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:190) 
    at org.hibernate.internal.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:301) 
    at org.hibernate.internal.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:236) 
    at org.hibernate.internal.SessionImpl.createQuery(SessionImpl.java:1796) 
    at TestHibernate.main(TestHibernate.java:40) 

下面是我的代码

Configuration cfgObj = new Configuration(); 
    cfgObj.configure("MySQLhibernate.cfg.xml"); 
    servcRegObj = (ServiceRegistry) new StandardServiceRegistryBuilder().applySettings(cfgObj.getProperties()).build(); 
    SessionFactory sfObj = cfgObj.buildSessionFactory(servcRegObj); 

    Session session = sfObj.openSession(); 
    BSCTable bscTblObj = new BSCTable(); 

    Query qry = session.createQuery("show databases"); 
    List<Object> databaseList = qry.list(); 
    for(Object object : databaseList) 
    { 
     System.out.println(object); 
    } 
    session.close(); 
    sfObj.close(); 
+0

'show databases'不是有效的HQL。只需直接针对jdbc对象运行特定于供应商的查询即可。 Hibernate不是以各种可能的方式与数据库交互的银弹。 – CollinD

回答

0

show databases不是有效的JPQL语句,并依赖你所使用的数据库上。您可以使用原生查询直接与数据库交谈,但在这种情况下,您将失去Hibernate独立于数据库实现的优势。

+0

现在工作......感谢您的协助。 –