0

I can't resolve error with dynamic parameter list "where in". Another query working

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

but

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

UPD new error

 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: Executing an update/delete query

I can't get transaction. So i can't use JpaTemplate pass list of id of news for deleting. Maybe JpaCallback

Bozho
  • 588,226
  • 146
  • 1,060
  • 1,140
Ivan
  • 3
  • 4

2 Answers2

1

You are having incompatible versions of hibernate and antlr. Upgrade your antlr.jar

Bozho
  • 588,226
  • 146
  • 1,060
  • 1,140
0

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

See http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html_single/#batch-direct for the reference.

JB Nizet
  • 678,734
  • 91
  • 1,224
  • 1,255
  • @NamedQuery(name = "News.delete", query = "DELETE FROM News n WHERE n.newsId in (:ids)") Thanks, but i get new error public void removeNews(List listOfIdNewsForDeleting) throws DAOException { EntityManager entityManager = getJpaTemplate().getEntityManagerFactory().createEntityManager(); Query query = entityManager.createNamedQuery("News.delete"); query.setParameter("ids", listOfIdNewsForDeleting); int deleted = query.executeUpdate(); i get Executing an update/delete query I can't understand what wrong. name – Ivan Aug 21 '11 at 12:38