【问题标题】:Hibernate on Multiple Tables在多个表上休眠
【发布时间】:2016-03-06 09:22:53
【问题描述】:

这是我的数据库的图表 我想从我的tablesdatawebgmailblogger获取信息。我是新手,我可以选择最容易执行的查询,我已经阅读了一些文档和相关问题。

我使用以下查询:

 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)

【问题讨论】:

  • 请阅读有关休眠的教程。这个查询完全错误
  • 如果你正确地映射你的实体,你就不必像现在这样自己进行连接了。
  • 您的 sql 不是有效的休眠查询。显示您的实体。
  • 谢谢大家,@Antoniossss 请给我一个具体的路径,材料太多我不知道从哪里开始

标签: java mysql hibernate


【解决方案1】:

以下方法将执行您的查询。但如果您完美地编写实体,您可以编写简化的 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();

【讨论】:

    猜你喜欢
    • 2016-09-20
    • 1970-01-01
    • 2015-05-23
    • 1970-01-01
    • 2014-10-22
    • 1970-01-01
    • 1970-01-01
    • 2018-01-26
    • 2014-01-23
    相关资源
    最近更新 更多