【问题标题】:JPA + SPRING=DAO. Dynamic Parameter ListJPA + SPRING=DAO。动态参数列表
【发布时间】:2011-10-31 13:53:22
【问题描述】:

我无法解决动态参数列表“在哪里”的错误。另一个查询工作

@NamedQuery(name = "News.delete", query = "DELETE n FROM News n WHERE n.newsId in (:ids)")

但是

引起:java.lang.NoSuchMethodError: org.hibernate.hql.antlr.HqlBaseParser.recover(Lantlr/RecognitionException;Lantlr/collections/impl/BitSet;)V 在 org.hibernate.hql.antlr.HqlBaseParser.optionalFromTokenFromClause(HqlBaseParser.java:400) 在 org.hibernate.hql.antlr.HqlBaseParser.deleteStatement(HqlBaseParser.java:259) 在 org.hibernate.hql.antlr.HqlBaseParser.statement(HqlBaseParser.java:148) 在 org.hibernate.hql.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:248) 在 org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:157) 在 org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:111) 在 org.hibernate.engine.query.HQLQueryPlan.(HQLQueryPlan.java:77) 在 org.hibernate.engine.query.HQLQueryPlan.(HQLQueryPlan.java:56) 在 org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:72) 在 org.hibernate.impl.SessionFactoryImpl.checkNamedQueries(SessionFactoryImpl.java:402) 在 org.hibernate.impl.SessionFactoryImpl.(SessionFactoryImpl.java:352) 在 org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1294) 在 org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:859) 在 org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:669) 在 org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:132) 在 org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:221) 在 org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:251) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1390) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1359)

UPD 新错误

 public void removeNews(List<Integer> listOfIdNewsForDeleting) throws DAOException {
    EntityManager entityManager = getJpaTemplate().getEntityManagerFactory().createEntityManager();

    Query query = entityManager.createNamedQuery("News.delete");
    query.setParameter("ids", listOfIdNewsForDeleting);
    int deleted = query.executeUpdate();}

javax.persistence.TransactionRequiredException:执行更新/删除查询

我无法获得交易。所以我不能使用JpaTemplate传递新闻ID列表来删除。也许JpaCallback

【问题讨论】:

    标签: java hibernate jpa dao


    【解决方案1】:

    使用DELETE FROM News n WHERE n.newsId in (:ids)

    参考http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html_single/#batch-direct

    【讨论】:

    • @NamedQuery(name = "News.delete", query = "DELETE FROM News n WHERE n.newsId in (:ids)") 谢谢,但我收到新错误 public void removeNews(List listOfIdNewsForDeleting) 抛出 DAOException { EntityManager entityManager = getJpaTemplate().getEntityManagerFactory().createEntityManager();查询查询 = entityManager.createNamedQuery("News.delete"); query.setParameter("ids", listOfIdNewsForDeleting); int deleted = query.executeUpdate();我得到执行更新/删除查询我不明白出了什么问题。名称
    【解决方案2】:

    您的 hibernate 和 antlr 版本不兼容。升级你的 antlr.jar

    【讨论】:

      猜你喜欢
      • 2023-03-30
      • 1970-01-01
      • 1970-01-01
      • 2010-12-27
      • 1970-01-01
      • 2019-08-06
      • 2017-04-07
      • 2017-12-17
      • 1970-01-01
      相关资源
      最近更新 更多