¿Cómo podemos probar nuestras funcionalidades de compras?
Es importante asegurarnos de que nuestras funcionalidades relacionadas a compras estén funcionando correctamente en nuestro sistema. Aquí te guiamos en cómo probar esas funcionalidades usando Postman. Antes de comenzar con las pruebas, recuerda que es crucial reiniciar tu servicio para aplicar todos los cambios realizados. Esto garantiza que el servidor esté operativo y reciba peticiones adecuadamente. Examinaremos tres métodos esenciales expuestos a través de nuestra API: obtener todas las compras, recuperar compras por cliente, y guardar una nueva compra.
¿Cómo obtener todas las compras?
Comenzaremos probando la funcionalidad para obtener todas las compras registradas. Usando Postman, puedes cargar la solicitud correspondiente. La clave es enviar la petición de tipo GET a través de la API, lo que te permitirá recibir una respuesta con el historial de compras. Esto te proporciona una visión general de todas las transacciones asociadas a los clientes:
GET /api/purchases/all
Abre Postman.
Selecciona o crea una nueva solicitud GET.
Introduce la URL correspondiente a obtener todas las compras.
Haz clic en "Send".
Revisa la respuesta que contiene una lista de compras asociadas a los clientes.
¿Cómo verificar compras específicas por cliente?
La siguiente prueba involucra recuperar compras específicas asociadas a un cliente en particular. Deberíamos introducir la cédula del cliente en cuestión dentro de la solicitud para obtener solo las compras realizadas por esa persona:
GET /api/purchases/client/:clientId
En Postman, selecciona la opción para crear o editar una solicitud GET.
Introduce la URL que permite recuperar compras por cliente, sustituyendo :clientId por el ID del cliente real.
Haz clic en "Send".
Examina los resultados para verificar que solo se muestran las compras del cliente indicado.
¿Cómo guardar una nueva compra?
Finalmente, probaremos la capacidad de nuestro sistema para almacenar nuevas compras. Esta solicitud requiere el uso del método POST, introduciendo los detalles de la compra dentro del cuerpo del mensaje. Es importante incluir detalles tales como el tipo de pago y la fecha de la compra:
POST /api/purchases/new
{"paymentMethod":"tarjeta","year":2020,"clientId":"1234567"}
En Postman, selecciona una nueva solicitud POST.
Introduce la URL para guardar una nueva compra.
Añade el body de la solicitud con los detalles necesarios.
Haz clic en "Send" y verifica que la compra se ha guardado correctamente.
Puedes confirmar su almacenamiento volviendo a utilizar la solicitud GET para obtener listas de compras, confirmando que la nueva transacción esté visible.
Este proceso garantiza que los servicios de compra estén operativos y sean fiables. Además, recuerda utilizar el archivo JSON proporcionado para importar las peticiones en tu entorno de Postman. Así, podrás estar seguro de que estás replicando el proceso y probando las solicitudes de manera eficiente. En clase futura, abordaremos la documentación de nuestra API con Swagger, ¡sigamos aprendiendo!
si alguno le sale este error Caused by: org.postgresql.util.PSQLException: Bad value for type int : 3104583224 al tratar de consultar el servicio all de compras, deben cambiar el tipo de dato del campo celular de la clase Entity Cliente.java pasando de Integer a Long y por consiguiente tambien cambiar los metodos Getter y Setter del mismo:
Gracias, también me arrojo el mismo error al consumir el servicio GetAll del controlador compras.
Confirmo!
Muchas gracias bro
Si alguno tiene este error:
org.postgresql.util.PSQLException: ERROR: no existe la relaci�n �compras_producto�
Revisen los nombres de las tablas en las anotaciones @Table de los entities. En mi caso tenía mapeada la tabla compras_productos como compras_producto, sin la s. En el entity de ComprasProducto.
Gracias por tu aportación me has ahorrado horas de investigación, me paso lo mismo.
Muchas Gracias!! lo pude solucionar gracias a tu aporte.
Hola compañeros aprendices.
Quiero mostrarles un detalle menor, pero ello me llevó tiempo descubrirlo y corregirlo.
El error como se aprecia esta en la importación de la clase incorrecta.
 no debería retornar estado 200 cuando se busca con un clientId que no exista en la base de datos, debería ser el NOT_FOUND, es decir, cuando retorna una lista vacia esta poniendo el estado como OK, en vez de poner NOT_FOUND.
Paso lo mismo con el método getByCategory de la clase ProductController.
Creo que en vez de usar el .map, se debería validar el tamaño de la lista que viene desde el service.
Que tal Hernan, creo tienes razón con esa observación, yo le cree el método de la siguiente forma y con esto ya regresa un 404.
Es buen ejemplo el que ponen, yo preferi hacer que sea el service el que se encargue de devolver un optional empty si la lista esta vacia, me parece mas limpio para no ponere codigo extra en el controller
Buenos días compañeros yo tuve el siguiente problema al querer obtenere mi lista de compras:
org.hibernate.LazyInitializationException: failed to lazily initialize a collection ofrole: com.platzi.supermercado.persistence.entity.Compra.productos, could not initialize proxy - no Session
Este problema según investigue es por que se cierra la sesión de hibernate antes de recuperar la lista de compras_productos, para esto hay dos soluciones la primera es un pequeño hack que debemos recuperar la lista antes de cerrar la sesión con el metodo size();
Y la segunda es colocar la anotación EAGER, espero que les ayude
Me salio este error en el postman y revise por mucho tiempoy si todo esta como en los recursos lo que pasa es que al enviar el request es de esta manera
{"clientId":"4546221","date":"2004-07-10T17:30:00","paymentMethod":"T","comment":"Nueva compra","state":"P","items":[{"productId":1,"quantity":10,"total":3000.0,"active":true},{"productId":24,"quantity":1,"total":4000.0,"active":true},{"productId":27,"quantity":1,"total":9000.0,"active":true},{"productId":36,"quantity":1,"total":40000.0,"active":true},{"productId":49,"quantity":2,"total":16400.0,"active":true}]}```el problema son los corchetes al principio y el del final
A que se puede deber que me arroje error 500 cuando intento realizar GET con postman ?? Si alguno le pasó, me dice así me pongo a buscar. Entiendo que es como un error interno del servidor puede ser?
¿Nos compartes la traza completa de tu error para ver que puede estar pasando?
2020-11-16 18:47:13.533 INFO 2484 --- [ main] c.platzi.market.PlatziMarketApplication : Starting PlatziMarketApplication on DESKTOP-S18F8H3 with PID 2484 (C:\Users\Franko\PLATZI-MARKET\build\classes\java\main started by Franko in C:\Users\Franko\PLATZI-MARKET)
2020-11-16 18:47:13.540 INFO 2484 --- [ main] c.platzi.market.PlatziMarketApplication : The following profiles are active: dev
2020-11-16 18:47:14.898 INFO 2484 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFERRED mode.
2020-11-16 18:47:15.039 INFO 2484 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 126ms. Found 2 JPA repository interfaces.
2020-11-16 18:47:16.284 INFO 2484 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8090 (http)
2020-11-16 18:47:16.308 INFO 2484 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2020-11-16 18:47:16.309 INFO 2484 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.38]
2020-11-16 18:47:16.577 INFO 2484 --- [ main] o.a.c.c.C.[.[.[/platzi-market/api] : Initializing Spring embedded WebApplicationContext
2020-11-16 18:47:16.578 INFO 2484 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 2934 ms
2020-11-16 18:47:17.012 INFO 2484 --- [ main] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor'
2020-11-16 18:47:17.044 INFO 2484 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting...
2020-11-16 18:47:17.349 INFO 2484 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed.
2020-11-16 18:47:17.501 INFO 2484 --- [ task-1] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default]
2020-11-16 18:47:17.739 WARN 2484 --- [ main] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning
2020-11-16 18:47:17.746 INFO 2484 --- [ task-1] org.hibernate.Version : HHH000412: Hibernate ORM core version 5.4.21.Final
2020-11-16 18:47:18.306 INFO 2484 --- [ task-1] o.hibernate.annotations.common.Version : HCANN000001: Hibernate Commons Annotations {5.1.0.Final}
2020-11-16 18:47:18.841 INFO 2484 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8090 (http) with context path '/platzi-market/api'
2020-11-16 18:47:18.843 INFO 2484 --- [ main] DeferredRepositoryInitializationListener : Triggering deferred initialization of Spring Data repositories�
2020-11-16 18:47:19.009 INFO 2484 --- [ task-1] org.hibernate.dialect.Dialect : HHH000400: Using dialect: org.hibernate.dialect.PostgreSQL10Dialect
2020-11-16 18:47:19.678 WARN 2484 --- [ task-1] org.hibernate.mapping.RootClass : HHH000038: Composite-id class does not override equals(): com.platzi.market.persistence.entity.ComprasProductoPK
2020-11-16 18:47:19.679 WARN 2484 --- [ task-1] org.hibernate.mapping.RootClass : HHH000039: Composite-id class does not override hashCode(): com.platzi.market.persistence.entity.ComprasProductoPK
2020-11-16 18:47:20.685 INFO 2484 --- [ task-1] o.h.e.t.j.p.i.JtaPlatformInitiator : HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform]
2020-11-16 18:47:20.701 INFO 2484 --- [ task-1] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
2020-11-16 18:47:21.271 INFO 2484 --- [ main] DeferredRepositoryInitializationListener : Spring Data repositories initialized!
2020-11-16 18:47:21.286 INFO 2484 --- [ main] c.platzi.market.PlatziMarketApplication : Started PlatziMarketApplication in 8.594 seconds (JVM running for 9.613)
2020-11-16 18:47:39.147 INFO 2484 --- [io-8090-exec-10] o.a.c.c.C.[.[.[/platzi-market/api] : Initializing Spring DispatcherServlet 'dispatcherServlet'
2020-11-16 18:47:39.148 INFO 2484 --- [io-8090-exec-10] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'
2020-11-16 18:47:39.157 INFO 2484 --- [io-8090-exec-10] o.s.web.servlet.DispatcherServlet : Completed initialization in 9 ms
2020-11-16 18:48:05.779 WARN 2484 --- [nio-8090-exec-8] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 0, SQLState: 42846
2020-11-16 18:48:05.780 ERROR 2484 --- [nio-8090-exec-8] o.h.engine.jdbc.spi.SqlExceptionHelper : Cannot cast to boolean: "P"
2020-11-16 18:48:05.802 ERROR 2484 --- [nio-8090-exec-8] o.a.c.c.C.[.[.[.[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [/platzi-market/api] threw exception [Request processing failed; nested exception is org.springframework.dao.InvalidDataAccessResourceUsageException: could not execute query; SQL [select compra0_.id_compra as id_compr1_2_, compra0_.id_cliente as id_clien5_2_, compra0_.comentario as comentar2_2_, compra0_.estado as estado3_2_, compra0_.fecha as fecha4_2_, compra0_.medio_pago as medio_pa6_2_ from compras compra0_]; nested exception is org.hibernate.exception.SQLGrammarException: could not execute query] with root cause
org.postgresql.util.PSQLException: Cannot cast to boolean: "P"
at org.postgresql.jdbc.BooleanTypeUtil.cannotCoerceException(BooleanTypeUtil.java:99) ~[postgresql-42.2.16.jar:42.2.16]
at org.postgresql.jdbc.BooleanTypeUtil.fromString(BooleanTypeUtil.java:67) ~[postgresql-42.2.16.jar:42.2.16]
at org.postgresql.jdbc.BooleanTypeUtil.castToBoolean(BooleanTypeUtil.java:43) ~[postgresql-42.2.16.jar:42.2.16]
at org.postgresql.jdbc.PgResultSet.getBoolean(PgResultSet.java:2088) ~[postgresql-42.2.16.jar:42.2.16]
at org.postgresql.jdbc.PgResultSet.getBoolean(PgResultSet.java:2611) ~[postgresql-42.2.16.jar:42.2.16]
at com.zaxxer.hikari.pool.HikariProxyResultSet.getBoolean(HikariProxyResultSet.java) ~[HikariCP-3.4.5.jar:na]
at org.hibernate.type.descriptor.sql.BooleanTypeDescriptor$2.doExtract(BooleanTypeDescriptor.java:59) ~[hibernate-core-5.4.21.Final.jar:5.4.21.Final]
at org.hibernate.type.descriptor.sql.BasicExtractor.extract(BasicExtractor.java:47) ~[hibernate-core-5.4.21.Final.jar:5.4.21.Final]
at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:257) ~[hibernate-core-5.4.21.Final.jar:5.4.21.Final]
at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:253) ~[hibernate-core-5.4.21.Final.jar:5.4.21.Final]
at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:243) ~[hibernate-core-5.4.21.Final.jar:5.4.21.Final]
at org.hibernate.type.AbstractStandardBasicType.hydrate(AbstractStandardBasicType.java:329) ~[hibernate-core-5.4.21.Final.jar:5.4.21.Final]
at org.hibernate.persister.entity.AbstractEntityPersister.hydrate(AbstractEntityPersister.java:3088) ~[hibernate-core-5.4.21.Final.jar:5.4.21.Final]
at org.hibernate.loader.Loader.loadFromResultSet(Loader.java:1907) ~[hibernate-core-5.4.21.Final.jar:5.4.21.Final]
at org.hibernate.loader.Loader.hydrateEntityState(Loader.java:1835) ~[hibernate-core-5.4.21.Final.jar:5.4.21.Final]
at org.hibernate.loader.Loader.instanceNotYetLoaded(Loader.java:1808) ~[hibernate-core-5.4.21.Final.jar:5.4.21.Final]
at org.hibernate.loader.Loader.getRow(Loader.java:1660) ~[hibernate-core-5.4.21.Final.jar:5.4.21.Final]
at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:745) ~[hibernate-core-5.4.21.Final.jar:5.4.21.Final]
at org.hibernate.loader.Loader.getRowsFromResultSet(Loader.java:1044) ~[hibernate-core-5.4.21.Final.jar:5.4.21.Final]
at org.hibernate.loader.Loader.processResultSet(Loader.java:995) ~[hibernate-core-5.4.21.Final.jar:5.4.21.Final]
at org.hibernate.loader.Loader.doQuery(Loader.java:964) ~[hibernate-core-5.4.21.Final.jar:5.4.21.Final]
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:350) ~[hibernate-core-5.4.21.Final.jar:5.4.21.Final]
at org.hibernate.loader.Loader.doList(Loader.java:2887) ~[hibernate-core-5.4.21.Final.jar:5.4.21.Final]
at org.hibernate.loader.Loader.doList(Loader.java:2869) ~[hibernate-core-5.4.21.Final.jar:5.4.21.Final]
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2701) ~[hibernate-core-5.4.21.Final.jar:5.4.21.Final]
at org.hibernate.loader.Loader.list(Loader.java:2696) ~[hibernate-core-5.4.21.Final.jar:5.4.21.Final]
at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:506) ~[hibernate-core-5.4.21.Final.jar:5.4.21.Final]
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:400) ~[hibernate-core-5.4.21.Final.jar:5.4.21.Final]
at org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:219) ~[hibernate-core-5.4.21.Final.jar:5.4.21.Final]
at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1415) ~[hibernate-core-5.4.21.Final.jar:5.4.21.Final]
at org.hibernate.query.internal.AbstractProducedQuery.doList(AbstractProducedQuery.java:1565) ~[hibernate-core-5.4.21.Final.jar:5.4.21.Final]
at org.hibernate.query.internal.AbstractProducedQuery.list(AbstractProducedQuery.java:1533) ~[hibernate-core-5.4.21.Final.jar:5.4.21.Final]
at org.hibernate.query.Query.getResultList(Query.java:165) ~[hibernate-core-5.4.21.Final.jar:5.4.21.Final]
at org.hibernate.query.criteria.internal.compile.CriteriaQueryTypeQueryAdapter.getResultList(CriteriaQueryTypeQueryAdapter.java:76) ~[hibernate-core-5.4.21.Final.jar:5.4.21.Final]
at org.springframework.data.jpa.repository.support.SimpleJpaRepository.findAll(SimpleJpaRepository.java:355) ~[spring-data-jpa-2.3.4.RELEASE.jar:2.3.4.RELEASE]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]
at org.springframework.data.repository.core.support.ImplementationInvocationMetadata.invoke(ImplementationInvocationMetadata.java:72) ~[spring-data-commons-2.3.4.RELEASE.jar:2.3.4.RELEASE]
at org.springframework.data.repository.core.support.RepositoryComposition$RepositoryFragments.invoke(RepositoryComposition.java:382) ~[spring-data-commons-2.3.4.RELEASE.jar:2.3.4.RELEASE]
at org.springframework.data.repository.core.support.RepositoryComposition.invoke(RepositoryComposition.java:205) ~[spring-data-commons-2.3.4.RELEASE.jar:2.3.4.RELEASE]
at org.springframework.data.repository.core.support.RepositoryFactorySupport$ImplementationMethodExecutionInterceptor.invoke(RepositoryFactorySupport.java:549) ~[spring-data-commons-2.3.4.RELEASE.jar:2.3.4.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.2.9.RELEASE.jar:5.2.9.RELEASE]
at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.doInvoke(QueryExecutorMethodInterceptor.java:155) ~[spring-data-commons-2.3.4.RELEASE.jar:2.3.4.RELEASE]
at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.invoke(QueryExecutorMethodInterceptor.java:130) ~[spring-data-commons-2.3.4.RELEASE.jar:2.3.4.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.2.9.RELEASE.jar:5.2.9.RELEASE]
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:367) ~[spring-tx-5.2.9.RELEASE.jar:5.2.9.RELEASE]
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:118) ~[spring-tx-5.2.9.RELEASE.jar:5.2.9.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.2.9.RELEASE.jar:5.2.9.RELEASE]
at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:139) ~[spring-tx-5.2.9.RELEASE.jar:5.2.9.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.2.9.RELEASE.jar:5.2.9.RELEASE]
at org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodInterceptor.invoke(CrudMethodMetadataPostProcessor.java:178) ~[spring-data-jpa-2.3.4.RELEASE.jar:2.3.4.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.2.9.RELEASE.jar:5.2.9.RELEASE]
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:95) ~[spring-aop-5.2.9.RELEASE.jar:5.2.9.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.2.9.RELEASE.jar:5.2.9.RELEASE]
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:212) ~[spring-aop-5.2.9.RELEASE.jar:5.2.9.RELEASE]
at com.sun.proxy.$Proxy98.findAll(Unknown Source) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:344) ~[spring-aop-5.2.9.RELEASE.jar:5.2.9.RELEASE]
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:205) ~[spring-aop-5.2.9.RELEASE.jar:5.2.9.RELEASE]
at com.sun.proxy.$Proxy62.findAll(Unknown Source) ~[na:na]
at com.platzi.market.persistence.CompraRepository.getAll(CompraRepository.java:25) ~[main/:na]
at com.platzi.market.persistence.CompraRepository$$FastClassBySpringCGLIB$$2c186a6.invoke(<generated>) ~[main/:na]
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) ~[spring-core-5.2.9.RELEASE.jar:5.2.9.RELEASE]
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:771) ~[spring-aop-5.2.9.RELEASE.jar:5.2.9.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-5.2.9.RELEASE.jar:5.2.9.RELEASE]
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:749) ~[spring-aop-5.2.9.RELEASE.jar:5.2.9.RELEASE]
at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:139) ~[spring-tx-5.2.9.RELEASE.jar:5.2.9.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.2.9.RELEASE.jar:5.2.9.RELEASE]
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:749) ~[spring-aop-5.2.9.RELEASE.jar:5.2.9.RELEASE]
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:691) ~[spring-aop-5.2.9.RELEASE.jar:5.2.9.RELEASE]
at com.platzi.market.persistence.CompraRepository$$EnhancerBySpringCGLIB$$8aa10b19.getAll(<generated>) ~[main/:na]
at com.platzi.market.domain.service.PurchaseService.getAll(PurchaseService.java:18) ~[main/:na]
at com.platzi.market.web.controller.PurchaseController.getAll(PurchaseController.java:21) ~[main/:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:190) ~[spring-web-5.2.9.RELEASE.jar:5.2.9.RELEASE]
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138) ~[spring-web-5.2.9.RELEASE.jar:5.2.9.RELEASE]
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:105) ~[spring-webmvc-5.2.9.RELEASE.jar:5.2.9.RELEASE]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:878) ~[spring-webmvc-5.2.9.RELEASE.jar:5.2.9.RELEASE]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:792) ~[spring-webmvc-5.2.9.RELEASE.jar:5.2.9.RELEASE]
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.2.9.RELEASE.jar:5.2.9.RELEASE]
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1040) ~[spring-webmvc-5.2.9.RELEASE.jar:5.2.9.RELEASE]
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943) ~[spring-webmvc-5.2.9.RELEASE.jar:5.2.9.RELEASE]
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.2.9.RELEASE.jar:5.2.9.RELEASE]
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) ~[spring-webmvc-5.2.9.RELEASE.jar:5.2.9.RELEASE]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:626) ~[tomcat-embed-core-9.0.38.jar:4.0.FR]
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.2.9.RELEASE.jar:5.2.9.RELEASE]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:733) ~[tomcat-embed-core-9.0.38.jar:4.0.FR]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) ~[tomcat-embed-core-9.0.38.jar:9.0.38]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.38.jar:9.0.38]
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-embed-websocket-9.0.38.jar:9.0.38]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.38.jar:9.0.38]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.38.jar:9.0.38]
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.2.9.RELEASE.jar:5.2.9.RELEASE]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.2.9.RELEASE.jar:5.2.9.RELEASE]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.38.jar:9.0.38]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.38.jar:9.0.38]
at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.2.9.RELEASE.jar:5.2.9.RELEASE]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.2.9.RELEASE.jar:5.2.9.RELEASE]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.38.jar:9.0.38]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.38.jar:9.0.38]
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.2.9.RELEASE.jar:5.2.9.RELEASE]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.2.9.RELEASE.jar:5.2.9.RELEASE]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.38.jar:9.0.38]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.38.jar:9.0.38]
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) ~[tomcat-embed-core-9.0.38.jar:9.0.38]
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) ~[tomcat-embed-core-9.0.38.jar:9.0.38]
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541) ~[tomcat-embed-core-9.0.38.jar:9.0.38]
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143) ~[tomcat-embed-core-9.0.38.jar:9.0.38]
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) ~[tomcat-embed-core-9.0.38.jar:9.0.38]
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) ~[tomcat-embed-core-9.0.38.jar:9.0.38]
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) ~[tomcat-embed-core-9.0.38.jar:9.0.38]
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374) ~[tomcat-embed-core-9.0.38.jar:9.0.38]
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) ~[tomcat-embed-core-9.0.38.jar:9.0.38]
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868) ~[tomcat-embed-core-9.0.38.jar:9.0.38]
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1590) ~[tomcat-embed-core-9.0.38.jar:9.0.38]
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-embed-core-9.0.38.jar:9.0.38]
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[na:na]
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[na:na]
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.38.jar:9.0.38]
at java.base/java.lang.Thread.run(Thread.java:834) ~[na:na]**
He trtatado de resolver este reto, pero me ha salido este error, el cual no he podido solucionar.
Could not read entity state from ResultSet : EntityKey[com.pincelab.market.persistence.entity.Cliente#4546221]
Copio de nuevo el error que me sale en la consola
org.hibernate.exception.DataException: Could not read entity state from ResultSet : EntityKey[com.pincelab.market.persistence.entity.Cliente#4546221]
2020-10-03 19:11:34.958 ERROR 4819 --- [nio-8090-exec-3] o.a.c.c.C.[.[.[.[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [/pincelab-market/api] threw exception [Request processing failed; nested exception is org.springframework.dao.DataIntegrityViolationException: Could not read entity state from ResultSet : EntityKey[com.pincelab.market.persistence.entity.Cliente#4546221]; SQL [n/a]; nested exception is org.hibernate.exception.DataException: Could not read entity state from ResultSet : EntityKey[com.pincelab.market.persistence.entity.Cliente#4546221]] with root cause
org.postgresql.util.PSQLException: Bad value for type int : 3104583224
si estas aqui te recomiendo fijarte mucho en los tipos tantos con los de las clases en entinty como los de las tablas dures dure 1 hora con un error porque en la case estava Integer y en la Tabla estaba long
publicPurchasesave(Purchase purchase){ Compra compra = mapper.toCompra(purchase);  compra.getProductos().forEach(producto -> producto.setCompra(compra)); if(compra.getIdCompra()==0){  compra.setIdCompra(null); } return mapper.toPurchase(crud.save(compra));}```
valida que no mandes Id y agregas las compras
Muchas gracias por tu ayuda, me ayudo demasiado!
Hola a todos al momento de guardar una nueva compra me sale la siguiente excepción:
.w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot deserialize instance of com.platzi.market.domain.Purchase out of START_ARRAY token; nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of com.platzi.market.domain.Purchase out of START_ARRAY token
at [Source: (PushbackInputStream); line: 1, column: 1]].
ya cheque la clase Purchase del dominio pero no encuentro diferencias con el codigo realizado por el profesor.
Tengo el mismo error y he revisado el código del profe y no lo logró resolverlo
Tengo el siguiente error en Postman y el metodo save tiene el @PostMapping("/save"), no se cual sea mi error.
Estás apuntando a /purchases/save pero en tu código intentas guardar un producto. O te equivocaste escribiendo el método para purchase o deberías apuntar a /products/save que sería el endpoint al que deberías apuntar para guardar un producto.
me sale null pointer exception en el metodo de save, por alguna razon el getProductos es nulo, ayuda
alguien me puede ayudar por favor?
me da este error:
>Task:MarketApplication.main().____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ |'_| | '_ \/ _` | \ \ \ \
\\/ ___)||_)|||||||(_||)))) ' |____|.__|_||_|_||_\__,|////=========|_|==============|___/=/_/_/_/::SpringBoot::(v3.1.0)2023-07-04T21:05:02.857-06:00INFO21464---[ main] dapv67.market.MarketApplication:StartingMarketApplication using Java17.0.7withPID21464(C:\Users\alvar\OneDrive-InstitutoTecnol�gico de CiudadGuzm�n\Escritorio\SpringBootCourse\API con Spring\market\build\classes\java\main started by alvar inC:\Users\alvar\OneDrive-InstitutoTecnol�gico de CiudadGuzm�n\Escritorio\SpringBootCourse\API con Spring\market)2023-07-04T21:05:02.862-06:00INFO21464---[ main] dapv67.market.MarketApplication:The following 1 profile is active:"dev"2023-07-04T21:05:03.998-06:00INFO21464---[ main].s.d.r.c.RepositoryConfigurationDelegate:BootstrappingSpringDataJPA repositories inDEFAULT mode.2023-07-04T21:05:04.143-06:00INFO21464---[ main].s.d.r.c.RepositoryConfigurationDelegate:FinishedSpringData repository scanning in125 ms.Found2JPA repository interfaces.2023-07-04T21:05:05.141-06:00INFO21464---[ main] o.s.b.w.embedded.tomcat.TomcatWebServer:Tomcat initialized withport(s):8090(http)2023-07-04T21:05:05.159-06:00INFO21464---[ main] o.apache.catalina.core.StandardService:Starting service [Tomcat]2023-07-04T21:05:05.159-06:00INFO21464---[ main] o.apache.catalina.core.StandardEngine:StartingServlet engine:[ApacheTomcat/10.1.8]2023-07-04T21:05:05.337-06:00INFO21464---[ main] o.a.c.c.C.[.[localhost].[/market/api]:InitializingSpring embedded WebApplicationContext2023-07-04T21:05:05.341-06:00INFO21464---[ main] w.s.c.ServletWebServerApplicationContext:RootWebApplicationContext: initialization completed in2377 ms
2023-07-04T21:05:05.565-06:00INFO21464---[ main] com.zaxxer.hikari.HikariDataSource:HikariPool-1-Starting...2023-07-04T21:05:05.909-06:00INFO21464---[ main] com.zaxxer.hikari.pool.HikariPool:HikariPool-1-Added connection org.postgresql.jdbc.PgConnection@66a5755
2023-07-04T21:05:05.911-06:00INFO21464---[ main] com.zaxxer.hikari.HikariDataSource:HikariPool-1-Start completed.2023-07-04T21:05:05.985-06:00INFO21464---[ main] o.hibernate.jpa.internal.util.LogHelper:HHH000204:ProcessingPersistenceUnitInfo[name:default]2023-07-04T21:05:06.094-06:00INFO21464---[ main] org.hibernate.Version:HHH000412:HibernateORM core version 6.2.2.Final2023-07-04T21:05:06.098-06:00INFO21464---[ main] org.hibernate.cfg.Environment:HHH000406:Using bytecode reflection optimizer
2023-07-04T21:05:06.412-06:00INFO21464---[ main] o.h.b.i.BytecodeProviderInitiator:HHH000021:Bytecode provider name : bytebuddy
2023-07-04T21:05:06.731-06:00INFO21464---[ main] o.s.o.j.p.SpringPersistenceUnitInfo:NoLoadTimeWeaver setup: ignoring JPAclasstransformer2023-07-04T21:05:06.853-06:00INFO21464---[ main] org.hibernate.orm.dialect:HHH035001:Using dialect: org.hibernate.dialect.PostgreSQLDialect,version: org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$DialectResolutionInfoImpl@5d2a86c0
2023-07-04T21:05:07.305-06:00INFO21464---[ main] o.h.b.i.BytecodeProviderInitiator:HHH000021:Bytecode provider name : bytebuddy
2023-07-04T21:05:07.417-06:00WARN21464---[ main] org.hibernate.mapping.RootClass:HHH000038:Composite-id classdoes not override equals(): dapv67.market.persistence.entity.ComprasProductoPK2023-07-04T21:05:07.417-06:00WARN21464---[ main] org.hibernate.mapping.RootClass:HHH000039:Composite-id classdoes not override hashCode(): dapv67.market.persistence.entity.ComprasProductoPK2023-07-04T21:05:08.411-06:00INFO21464---[ main] o.h.e.t.j.p.i.JtaPlatformInitiator:HHH000490:UsingJtaPlatform implementation:[org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform]2023-07-04T21:05:08.415-06:00INFO21464---[ main] j.LocalContainerEntityManagerFactoryBean:InitializedJPAEntityManagerFactoryfor persistence unit 'default'2023-07-04T21:05:08.436-06:00WARN21464---[ main]ConfigServletWebServerApplicationContext:Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException:Error creating bean with name 'productService':Unsatisfied dependency expressed through field 'productRepository':No qualifying bean of type 'dapv67.market.domain.repository.ProductRepository'available: expected at least 1 bean which qualifies as autowire candidate.Dependency annotations:{@org.springframework.beans.factory.annotation.Autowired(required=true)}2023-07-04T21:05:08.437-06:00INFO21464---[ main] j.LocalContainerEntityManagerFactoryBean:ClosingJPAEntityManagerFactoryfor persistence unit 'default'2023-07-04T21:05:08.445-06:00INFO21464---[ main] com.zaxxer.hikari.HikariDataSource:HikariPool-1-Shutdown initiated...2023-07-04T21:05:08.461-06:00INFO21464---[ main] com.zaxxer.hikari.HikariDataSource:HikariPool-1-Shutdown completed.2023-07-04T21:05:08.465-06:00INFO21464---[ main] o.apache.catalina.core.StandardService:Stopping service [Tomcat]2023-07-04T21:05:08.498-06:00INFO21464---[ main].s.b.a.l.ConditionEvaluationReportLogger:Error starting ApplicationContext.To display the condition evaluation report re-run your application with'debug' enabled.2023-07-04T21:05:08.533-06:00ERROR21464---[ main] o.s.b.d.LoggingFailureAnalysisReporter:***************************APPLICATIONFAILEDTOSTART***************************Description:Field productRepository in dapv67.market.domain.service.ProductService required a bean of type 'dapv67.market.domain.repository.ProductRepository' that could not be found.The injection point has the following annotations:- @org.springframework.beans.factory.annotation.Autowired(required=true)Action:Consider defining a bean of type 'dapv67.market.domain.repository.ProductRepository'in your configuration.>Task:MarketApplication.main()FAILEDExecution failed for task ':MarketApplication.main()'.>Process'command 'C:/ProgramFiles/Java/jdk-17/bin/java.exe'' finished with non-zero exit value 1*Try:>Runwith--stacktrace option to get the stack trace.>Runwith--info or --debug option to get more log output.>Runwith--scan to get full insights.