Java 尝试使用Hibernate进行查询时出错(其中位于ID列表中)

Java 尝试使用Hibernate进行查询时出错(其中位于ID列表中),java,hibernate,Java,Hibernate,我是java编程新手,我试图完成这个方法,在这个方法中,使用一个id数组,查找产品的价格,并将其保存在数据库中。 我有两个错误: 首先,方法obtenerprisios不返回包含所有值的字符串(查询不起作用)。 第二,方法confirmarVenta不通过数组列表,并在第二个元素处中断 这是我的代码,我将感谢所有的帮助 package Controladores; import Modelos.HibernateUtil; import Modelos.Productos; impor

我是java编程新手,我试图完成这个方法,在这个方法中,使用一个id数组,查找产品的价格,并将其保存在数据库中。 我有两个错误: 首先,方法obtenerprisios不返回包含所有值的字符串(查询不起作用)。 第二,方法confirmarVenta不通过数组列表,并在第二个元素处中断

这是我的代码,我将感谢所有的帮助

    package Controladores;

import Modelos.HibernateUtil;
import Modelos.Productos;
import Modelos.Venta;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Random;
import org.hibernate.Query;
import org.hibernate.Session;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;


@Controller
@RequestMapping("/venta.htm")
public class CVentas {

    @RequestMapping(method=RequestMethod.GET)
     public ModelAndView getProduct (){

         ModelAndView mv = new ModelAndView ("vVentas");
        String out = "Productos";
        try{
            Session session=HibernateUtil.getSessionFactory().openSession();
            session.beginTransaction();
            List result = session.createQuery("from Productos").list();
            mv.addObject("product", result);
            session.getTransaction().commit();
            session.close();

        }catch(Exception e){
            e.printStackTrace();
        }
        mv.addObject("message", out);
        return mv;


    }

    private static java.sql.Date getCurrentDate() {
        java.util.Date today = new java.util.Date();
        return new java.sql.Date(today.getTime());
    }

    private Integer generarID(){

        int x = new Random().nextInt(10 + 1);
        int y = new Random().nextInt(7 + 1);
        int z = new Random().nextInt(9 + 1);

        int uniqueID =((x + y) *z) + x + y ;

        return uniqueID;
    }

   private String obtenerPrecios (String ids) {
       System.out.println("ids parametro: :" + ids);
       try{

            Session session=HibernateUtil.getSessionFactory().openSession();
            session.beginTransaction();

            List<String> listaIds = new ArrayList<String>();
            System.out.println("ids lista: :" + listaIds);
            listaIds = Arrays.asList(ids);
            System.out.println("listaIds :" + listaIds);
            List result = session.createQuery("SELECT p.precioUnidad FROM Productos p WHERE p.id IN (:ids)").setParameter("ids", listaIds).list();

            session.getTransaction().commit();
            session.close();

            System.out.println("precios :" + result);
            //listaIds.toString();
            System.out.println("lista a string :" + result.toString());
            return result.toString();

        }catch(Exception e){
            e.printStackTrace();
            return "error";
        }


   }



    @RequestMapping ( method = RequestMethod.POST )
    public String confirmarVenta (@RequestParam(value = "check", required = true) String checkboxValores,  Model model){

         System.out.println(checkboxValores +":  String con ids");

         try{
            Session session=HibernateUtil.getSessionFactory().openSession();
            session.beginTransaction();

            Venta vnt = new Venta();
            Productos prdcts = new Productos();

            int idVenta = generarID();

//            List ids = Arrays.asList(checkboxValores);
            System.out.println(checkboxValores +":  Array con ids");
//            List result = session.createQuery("from Productos where id=" + ids).list();
//            System.out.println(result + "result");
            for( int i=0; i < checkboxValores.length(); i++){
                System.out.println("ids :" + checkboxValores );
                int idP;
                String precioQ;

                idP = Character.getNumericValue(checkboxValores.charAt(i));
                precioQ = obtenerPrecios (checkboxValores);


                System.out.println(idP + ": id aguardar dentro del for");


                vnt.setFechaVenta(getCurrentDate());
                System.out.println(idVenta + ": id venta");
                vnt.setIdVenta(idVenta);
                System.out.println(precioQ.charAt(i) + ": precio");
                vnt.setMonto(precioQ.charAt(i));
                vnt.setIdProducto(idP);
                //vnt.setIdUsuario(id); pasar por url el id del empleado y pasarlo como parametro.
                session.save(vnt);
                model.addAttribute(vnt);
                session.getTransaction().commit();

            }
            session.close();
            return "transicionVenta";
         }catch(Exception e){
            e.printStackTrace();
            return"error";
        }


     }


}

您必须使用setParameterList方法,您可以在该链接中看到一些详细信息
您将标识符作为字符串传递。首先,如果要创建ID列表,可以执行以下操作:

List idsList=Arrays.asList(ids.split(“,”)

然后可以将字符串列表转换为整数列表:

List iList=idsList.stream().map(Integer::valueOf).collect(Collectors.toList())


然后作为参数传递到查询

你能附加错误的堆栈跟踪吗?@Anthony我编辑线程并发布Glassfish的输出,在那里你可以看到错误的跟踪和我在代码中设置的打印。你好,Mohammad,我做了这个更改,但仍然没有工作。如果我正确理解了玻璃鱼的日志,那么我就遇到了这个问题:Grave:java.lang.ClassCastException:java.lang.String不能转换为java.lang.Integer。现在的查询代码是:List result=session.createQuery(“从Productos p中选择p.precioUnidad,其中p.id位于(:stringIds)”).setParameterList(“stringIds”,listaIds).List();您的实体id是否为整数?使您的列表完整如果id实体为int,我将尝试将id列表转换为int数组。谢谢@Anthony,这样我就解决了查询问题,现在我将继续使用te rest。
Información:   2: id aguardar dentro del for
Información:   130: id venta
Información:   e: precio
Información:   ids :2,4
Información:   ids parametro: :2,4
Información:   ids lista: :[]
Información:   listaIds :[2,4]
Grave:   java.lang.ClassCastException: java.util.Arrays$ArrayList cannot be cast to java.lang.Integer
    at org.hibernate.type.descriptor.java.IntegerTypeDescriptor.unwrap(IntegerTypeDescriptor.java:36)
    at org.hibernate.type.descriptor.sql.IntegerTypeDescriptor$1.doBind(IntegerTypeDescriptor.java:64)
    at org.hibernate.type.descriptor.sql.BasicBinder.bind(BasicBinder.java:90)
    at org.hibernate.type.AbstractStandardBasicType.nullSafeSet(AbstractStandardBasicType.java:282)
    at org.hibernate.type.AbstractStandardBasicType.nullSafeSet(AbstractStandardBasicType.java:277)
    at org.hibernate.param.NamedParameterSpecification.bind(NamedParameterSpecification.java:67)
    at org.hibernate.loader.hql.QueryLoader.bindParameterValues(QueryLoader.java:613)
    at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1900)
    at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1861)
    at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1838)
    at org.hibernate.loader.Loader.doQuery(Loader.java:909)
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:354)
    at org.hibernate.loader.Loader.doList(Loader.java:2551)
    at org.hibernate.loader.Loader.doList(Loader.java:2537)
    at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2367)
    at org.hibernate.loader.Loader.list(Loader.java:2362)
    at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:496)
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:387)
    at org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:229)
    at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1260)
    at org.hibernate.internal.QueryImpl.list(QueryImpl.java:103)
    at Controladores.CVentas.obtenerPrecios(CVentas.java:83)
    at Controladores.CVentas.confirmarVenta(CVentas.java:127)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:175)
    at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:446)
    at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:434)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:945)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:876)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961)
    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:863)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
    at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1682)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:344)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214)
    at org.glassfish.tyrus.servlet.TyrusServletFilter.doFilter(TyrusServletFilter.java:305)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:316)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:160)
    at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:734)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:673)
    at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:99)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:174)
    at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:416)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:283)
    at com.sun.enterprise.v3.services.impl.ContainerMapper$HttpHandlerCallable.call(ContainerMapper.java:459)
    at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:167)
    at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:206)
    at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:180)
    at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:235)
    at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:283)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:200)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:132)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:111)
    at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)
    at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:536)
    at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:117)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:56)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:137)
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:591)
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:571)
    at java.lang.Thread.run(Thread.java:745)
Grave:   org.hibernate.TransactionException: Transaction not successfully started
    at org.hibernate.engine.transaction.spi.AbstractTransactionImpl.commit(AbstractTransactionImpl.java:172)
    at Controladores.CVentas.confirmarVenta(CVentas.java:142)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:175)
    at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:446)
    at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:434)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:945)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:876)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961)
    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:863)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
    at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1682)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:344)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214)
    at org.glassfish.tyrus.servlet.TyrusServletFilter.doFilter(TyrusServletFilter.java:305)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:316)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:160)
    at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:734)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:673)
    at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:99)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:174)
    at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:416)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:283)
    at com.sun.enterprise.v3.services.impl.ContainerMapper$HttpHandlerCallable.call(ContainerMapper.java:459)
    at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:167)
    at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:206)
    at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:180)
    at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:235)
    at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:283)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:200)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:132)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:111)
    at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)
    at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:536)
    at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:117)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:56)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:137)
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:591)
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:571)
    at java.lang.Thread.run(Thread.java:745)
Información:   -1: id aguardar dentro del for
Información:   130: id venta
Información:   r: precio