Java Hibernate模板会话查询

Java Hibernate模板会话查询,java,hibernate,spring,jakarta-ee,Java,Hibernate,Spring,Jakarta Ee,我们使用SpringHibernateTemplate类进行hibernate操作。我需要使用in子句执行查询,并使用arrayList设置in的选项。为此,我需要一个org.hibernate.Query对象 String queryStr = "from CertMetadataCfg where metadataId in (:metadataIds)"; Query query=hibernateTemplate.getSessionFactory().openSession().cre

我们使用SpringHibernateTemplate类进行hibernate操作。我需要使用in子句执行查询,并使用arrayList设置in的选项。为此,我需要一个org.hibernate.Query对象

String queryStr = "from CertMetadataCfg where metadataId in (:metadataIds)";
Query query=hibernateTemplate.getSessionFactory().openSession().createQuery(queryStr)
query.setParameterList("metadataIds", metadataSet);

但是为了检索查询对象,我们必须打开一个新会话。为什么我们需要开一个会议。我们应该何时关闭此会话。

HibernateTemplate执行会话处理的打开和关闭

请检查文件

使用findByNamedParam-

getHibernateTemplate().findByNamedParam("from CertMetadataCfg where metadataId in (:metadataIds)", "metadataIds", metadataIds);

如果您只想阅读,则不需要打开会话。使用getHibernateTemplate.findqueryString

当我尝试这种方法时,我得到了这个错误。java.lang.IndexOutOfBoundsException:记住序号参数是基于1的!java.lang.IndexOutOfBoundsException:记住序号参数是基于1的!getHibernateTemplate.findByNamedParamfrom CertMetadataCfg,其中metadataId位于:metadataId、metadataId、metadataId;MetadataId应该是一个列表