2015-12-02 18 views
-2

這裏是我的數據庫的示意圖 enter image description here 我想從我的tablesdatawebgmailblogger。我是一個新手的信息,我可以選擇成爲最容易執行查詢,我已閱讀了一些文件和相關問題。Hibernate的多個表

我用下面的查詢:

String sql = "SELECT parseUrl,w.url,w.status,title,content,label,labelTXT,desctiption,b.user,accessToken,clientID,clientSecret,p12FileLocation,b.lastModifiedTime\n" 
       + " FROM MdDataweb w,MdParse p,MdParseBlogger pb,MdBlogger b,MdGmail g \n" 
       + " INNER JOIN w.url=p.url\n" 
       + " INNER JOIN p.url =pb.url\n" 
       + " INNER JOIN pb.blog=b.blog\n" 
       + " INNER JOIN b.user=g.user"; 
     return currentSession.createQuery(sql).list(); 

但是,當我發揮它始終是一個錯誤信息,請大家幫我

thg 12 02, 2015 2:31:22 CH org.hibernate.hql.internal.ast.ErrorCounter reportError 
ERROR: line 3:24: unexpected token: = 
thg 12 02, 2015 2:31:22 CH org.hibernate.hql.internal.ast.ErrorCounter reportError 
ERROR: line 3:24: unexpected token: = 
line 3:24: unexpected token: = 
    at org.hibernate.hql.internal.antlr.HqlBaseParser.fromJoin(HqlBaseParser.java:1687) 
    at org.hibernate.hql.internal.antlr.HqlBaseParser.fromClause(HqlBaseParser.java:1371) 
    at org.hibernate.hql.internal.antlr.HqlBaseParser.selectFrom(HqlBaseParser.java:1077) 
    at org.hibernate.hql.internal.antlr.HqlBaseParser.queryRule(HqlBaseParser.java:723) 
    at org.hibernate.hql.internal.antlr.HqlBaseParser.selectStatement(HqlBaseParser.java:316) 
    at org.hibernate.hql.internal.antlr.HqlBaseParser.statement(HqlBaseParser.java:179) 
    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 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at org.hibernate.context.internal.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:356) 
    at com.sun.proxy.$Proxy3.createQuery(Unknown Source) 
    at dbUtility.DBTable.showDataweb(DBTable.java:73) 
    at dbUtility.DBTable.main(DBTable.java:79) 

thg 12 02, 2015 2:31:22 CH org.hibernate.hql.internal.ast.ErrorCounter reportError 
ERROR: line 4:26: unexpected token: = 
thg 12 02, 2015 2:31:22 CH org.hibernate.hql.internal.ast.ErrorCounter reportError 
ERROR: line 4:26: unexpected token: = 
line 4:26: unexpected token: = 
    at org.hibernate.hql.internal.antlr.HqlBaseParser.fromJoin(HqlBaseParser.java:1687) 
    at org.hibernate.hql.internal.antlr.HqlBaseParser.fromClause(HqlBaseParser.java:1371) 
    at org.hibernate.hql.internal.antlr.HqlBaseParser.selectFrom(HqlBaseParser.java:1077) 
    at org.hibernate.hql.internal.antlr.HqlBaseParser.queryRule(HqlBaseParser.java:723) 
    at org.hibernate.hql.internal.antlr.HqlBaseParser.selectStatement(HqlBaseParser.java:316) 
    at org.hibernate.hql.internal.antlr.HqlBaseParser.statement(HqlBaseParser.java:179) 
    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 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at org.hibernate.context.internal.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:356) 
    at com.sun.proxy.$Proxy3.createQuery(Unknown Source) 
    at dbUtility.DBTable.showDataweb(DBTable.java:73) 
    at dbUtility.DBTable.main(DBTable.java:79) 
+3

請閱讀關於休眠的教程。此查詢完全錯誤 –

+2

如果您將實體映射到正確的位置,則不必像現在一樣自行進行連接。 – Antoniossss

+1

你的sql不是有效的hibernate查詢。顯示你的實體。 – Patrick

回答

1

下面的方法,如果你寫將執行你的query.But您的實體可以完美地編寫簡化的HQL查詢。

String sql = "SELECT parseUrl,w.url,w.status,title,content,label,labelTXT,desctiption,b.user,accessToken,clientID,clientSecret,p12FileLocation,b.lastModifiedTime\n" 
      + " FROM MdDataweb w,MdParse p,MdParseBlogger pb,MdBlogger b,MdGmail g" 
      + " INNER JOIN w.url=p.url" 
      + " INNER JOIN p.url =pb.url" 
      + " INNER JOIN pb.blog=b.blog" 
      + " INNER JOIN b.user=g.user"; 

SQLQuery sqlQuery = (SQLQuery) currentSession.createSQLQuery(sql).setResultTransformer(Transformers.aliasToBean(YourDTO.class)); 
sqlQuery.addScalar("parseUrl", StringType.INSTANCE); 
sqlQuery.addScalar("url", DoubleType.INSTANCE); 
// like this add all your columns which are in select 
// YourDTO.class should have all these properties and its setter and getters 
return sqlQuery.list(); 
相關問題