2011-04-07 63 views
0

嗨 IM使用与支柱冬眠..Hibernate的问题

我想一个表中的数据复制到另一个表,所以我做了这样的事情...

public boolean updateAllScrutinyTables() { 
     // TODO Auto-generated method stub 
     Session session = HibernateUtil.getSessionFactory().getCurrentSession(); 
     String query = ""; 

     try{ 
      query = "insert into SRequisitionAge select * from RequisitionAge ra where ra.Requisition.id = 7"; 


      session.beginTransaction(); 
      session.createQuery(query).executeUpdate(); 
      session.getTransaction().commit(); 
      return true; 
     }catch(Exception e){ 
      e.printStackTrace(); 
      Log.error("Error in SRequisitionPostDAOImpl.updateAllScrutinyTables() : "+e.toString()); 
      return false; 
     } 
    } 

当我将执行此我我会得到这个错误

org.hibernate.hql.ast.QuerySyntaxException: expecting OPEN, found 'select' near line 1, column 29 [insert into SRequisitionAge select * from com.sttl.rpsc.dataobject.RequisitionAge ra where ra.Requisition.id = 7] 
    at org.hibernate.hql.ast.QuerySyntaxException.convert(QuerySyntaxException.java:54) 
    at org.hibernate.hql.ast.QuerySyntaxException.convert(QuerySyntaxException.java:47) 
    at org.hibernate.hql.ast.ErrorCounter.throwQueryException(ErrorCounter.java:82) 
    at org.hibernate.hql.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:281) 
    at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:180) 
    at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:134) 
    at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:101) 
    at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:80) 
    at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:94) 
    at org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:156) 
    at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:135) 
    at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1650) 
    at sun.reflect.GeneratedMethodAccessor256.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at org.hibernate.context.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:342) 
    at $Proxy7.createQuery(Unknown Source) 
    at com.sttl.rpsc.dao.SRequisitionPostDAOImpl.updateAllScrutinyTables(SRequisitionPostDAOImpl.java:135) 
    at com.sttl.rpsc.service.RequisitionServiceImpl.updateAllScrutinizeReqTables(RequisitionServiceImpl.java:268) 
    at com.sttl.rpsc.action.RequisitionAction.setScrutinizePostRequisition(RequisitionAction.java:1894) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:441) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:280) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:243) 
    at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:89) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) 
    at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:122) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) 
    at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195) 
    at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) 
    at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:94) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) 
    at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:138) 
    at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) 
    at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) 
    at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:176) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) 
    at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52) 
    at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:488) 
    at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:395) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.displaytag.filter.ResponseOverrideFilter.doFilter(ResponseOverrideFilter.java:125) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) 
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859) 
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588) 
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) 
    at java.lang.Thread.run(Unknown Source) 

所以最新的问题??我可以在冬眠时做这样的事情吗?如果没有那么最新的选择?

回答

0

也许你并不需要太多参与尖锐湿疣的休眠状态,这样你就可以用本机查询做到这一点 - createSQLQuery(..)

除此之外,您可以:

  • 选择所有实体
  • 迭代它们,并在每次迭代时从新类型创建一个新对象,并设置保存新实体的相应字段

这将需要更多的疑问,虽然

+0

嗨bozho,谢谢你的回复,但我没有在我的系统中使用NativeQuery的权限,所以我必须使用创建查询,所以是有任何替代或我必须在这里更正任何东西? – Sanju 2011-04-07 10:58:18

0

试着改变你的查询是这样的:

Query query = session.createQuery("insert into Stock(stock_code, stock_name)" + 
       "select stock_code, stock_name from backup_stock"); 

希望这有助于。

+0

嗨nikunj,谢谢你的回复,我曾试过这个(http://www.mkyong.com/hibernate/hibernate-query-examples-hql/),nu ti在我的表中有一些参考,所以我必须做出查询字段名或查询中的POJO名称? – Sanju 2011-04-07 11:06:59

+0

应该是HQL的POJO属性。 – Reddy 2011-04-07 11:11:56

+1

INSERT语句的伪语法是:INSERT INTO EntityName properties_list select_statement。 只支持INSERT INTO ... SELECT ...表单;不是INSERT INTO ... VALUES ...表单。 properties_list类似于SQL INSERT语句中的列规范。对于涉及映射继承的实体,只能在properties_list中使用直接定义在给定类级别上的属性。超类属性是不允许的,子类属性是不合理的。换句话说,INSERT语句本质上是非多态的。 – nIKUNJ 2011-04-07 11:17:22