[英]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.