簡體   English   中英

在冬眠中插入表中選擇錯誤

[英]Error in Insert into select from table in hibernate

我們正在將系統中的SQL查詢轉換為HQL,以使系統數據庫獨立。 我們面臨着將插入查詢從SQL轉換為HQL的問題。 以下是我們面臨問題的查詢之一。

我們已將查詢轉換為HQL:

<query name="Basoseext2TO_CopyFromExtrFile">
       insert into Basoseext2TO(id.location,id.masterco,id.symbol,id.policyno,id.module,id.filename,id.thedata)
       select 
       substring(id.thedata, 1, 2),
       substring(id.thedata, 3, 2),
       substring(id.thedata, 5, 3),
       substring(id.thedata, 8, 7),
       substring(id.thedata, 15, 2),
       substring(id.thedata, 17, 10),
       substring(id.thedata, 27, 3976)
       from com.csc.pt.svc.data.to.ExtrfileTO ExtrfileTO
</query>

啟動時獲取以下異常

[org.hibernate.hql.internal.ast.ErrorCounter](ERROR): <AST>:2:36: unexpected AST node: .
    [org.hibernate.hql.internal.ast.ErrorCounter](ERROR): <AST>:2:36: unexpected AST node: .
    <AST>:2:36: unexpected AST node: .
           at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.insertablePropertySpec(HqlSqlBaseWalker.java:984)
           at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.intoClause(HqlSqlBaseWalker.java:849)
           at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.insertStatement(HqlSqlBaseWalker.java:497)
           at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:271)
           at org.hibernate.hql.internal.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:248)
           at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:183)
           at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:136)
           at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:105)
           at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:80)
           at org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:168)
           at org.hibernate.internal.SessionFactoryImpl.checkNamedQueries(SessionFactoryImpl.java:1081)
           at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:519)
           at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1760)
           at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1798)
           at bphx.c2ab.hibernate.HibernateSessionFactory.rebuildSessionFactory(HibernateSessionFactory.java:216)
           at bphx.c2ab.hibernate.HibernateSessionFactory.rebuildSessionFactory(HibernateSessionFactory.java:462)
           at bphx.c2ab.hibernate.HibernateSessionFactory$1.run(HibernateSessionFactory.java:157)
           at java.lang.Thread.run(Thread.java:745)

    2.   
           org.hibernate.QueryException: could not resolve property:  of: com.csc.pt.svc.data.to.Basoseext2TO [
           insert into Basoseext2TO(id.location,id.masterco,id.symbol,id.policyno,id.module,id.filename,id.thedata)
           select 
           substring(id.thedata, 1, 2),
           substring(id.thedata, 3, 2),
           substring(id.thedata, 5, 3),
           substring(id.thedata, 8, 7),
           substring(id.thedata, 15, 2),
           substring(id.thedata, 17, 10),
           substring(id.thedata, 27, 3976)
           from com.csc.pt.svc.data.to.ExtrfileTO ExtrfileTO
    ]
           at org.hibernate.persister.entity.AbstractPropertyMapping.propertyException(AbstractPropertyMapping.java:83)
           at org.hibernate.persister.entity.AbstractPropertyMapping.toType(AbstractPropertyMapping.java:77) 
    at org.hibernate.persister.entity.AbstractEntityPersister.getSubclassPropertyTableNumber(AbstractEntityPersister.java:1985)
           at org.hibernate.hql.internal.ast.tree.IntoClause.isSuperclassProperty(IntoClause.java:229)
           at org.hibernate.hql.internal.ast.tree.IntoClause.visitPropertySpecNodes(IntoClause.java:171)
           at org.hibernate.hql.internal.ast.tree.IntoClause.initializeColumns(IntoClause.java:153)
           at org.hibernate.hql.internal.ast.tree.IntoClause.initialize(IntoClause.java:65)
           at org.hibernate.hql.internal.ast.HqlSqlWalker.createIntoClause(HqlSqlWalker.java:1154)
           at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.intoClause(HqlSqlBaseWalker.java:857)
           at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.insertStatement(HqlSqlBaseWalker.java:497)
           at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:271)
           at org.hibernate.hql.internal.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:248)
           at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:183)
           at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:136)
           at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:105)
           at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:80)
           at org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:168)
           at org.hibernate.internal.SessionFactoryImpl.checkNamedQueries(SessionFactoryImpl.java:1081)
           at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:519)
           at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1760)
           at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1798)
           at bphx.c2ab.hibernate.HibernateSessionFactory.rebuildSessionFactory(HibernateSessionFactory.java:216)
           at bphx.c2ab.hibernate.HibernateSessionFactory.rebuildSessionFactory(HibernateSessionFactory.java:462)
           at bphx.c2ab.hibernate.HibernateSessionFactory$1.run(HibernateSessionFactory.java:157)
           at java.lang.Thread.run(Thread.java:745)

任何想法如何解決或編碼這樣的查詢?

這是行不通的,因為在select查詢中插入不允許在hibernate類中使用復合鍵嗎?

根據休眠文檔,結構應為: INSERT INTO EntityName properties_list select_statement從休眠文檔示例中,您的代碼應類似於:

<query name="Basoseext2TO_CopyFromExtrFile">
       insert into Basoseext2TO(field_properties)
       select 
       substring(id.thedata, 1, 2),
       substring(id.thedata, 3, 2),
       substring(id.thedata, 5, 3),
       substring(id.thedata, 8, 7),
       substring(id.thedata, 15, 2),
       substring(id.thedata, 17, 10),
       substring(id.thedata, 27, 3976)
       from com.csc.pt.svc.data.to.ExtrfileTO ExtrfileTO
</query>

檢查這里: INSERT的HQL語法

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM