Harrison Martinez
Edison Andres Jiménez Heredia
Gracias, también me arrojo el mismo error al consumir el servicio GetAll del controlador compras.
Josue Tonatiuh Echeverria Vargas
Confirmo!
Muchas gracias bro
¿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
GET.¿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
GET.:clientId por el ID del cliente real.¿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" }
POST.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!
Harrison Martinez
Edison Andres Jiménez Heredia
Gracias, también me arrojo el mismo error al consumir el servicio GetAll del controlador compras.
Josue Tonatiuh Echeverria Vargas
Confirmo!
Muchas gracias bro
Johann Eslava Rodriguez
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.
Jose Antonio González Alcántara
Gracias por tu aportación me has ahorrado horas de investigación, me paso lo mismo.
Veronica Jhannet Gomez Catunta
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.
Felipe de Jesús Galindo Aguilar
Alan Lapierre
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
@Override public Optional<List<Product>> getByCategoryId(Long categoryId) { List<ProductEntity> products = productCrudRepository.findByCategoryIdOrderByNameAsc(categoryId); if(products.size() == 0) { return Optional.empty(); } return Optional.of(productPerMapper.toProducts(products)); }
William Alexander Hernandez Leiva
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 of role: 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
@OneToMany(mappedBy = "compra", cascade = CascadeType.ALL, fetch = FetchType.EAGER) private List<ComprasProducto> productos;
Sanders Gutiérrez
Tremendo dato, casi me vuelvo loco
Alexander Giraldo Poveda
al ejecutar en Postman purchases/all me sale un Satus: 500 Internal Server Error y no se la razón por mas que la busco. Alguno me puede ayudar?
Alejandro cruzado
Hola Alexander, tenía el mismo problema y lo logre solucionar agregando un parámetro en la anotación @ManyToOne de la clase Compra
@ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "id_compra", insertable = false, updatable = false) private Cliente cliente;
Te dejo este video donde explican de que se trata fetch https://youtu.be/Bi3uIoW2nG4
Juan Felipe Franco Rosas
Franco David Oliva
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?
Alejandro Ramírez
Profesor¿Nos compartes la traza completa de tu error para ver que puede estar pasando?
Franco David Oliva
Carlos Julian Grisales Alvarez
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]
Este es mi repositorio: https://github.com/jgrisalescode/spring-market-API
Agradezco un poco de ayuda por que ando atascado en este punto.
Un saludo
Alejandro Ramírez
ProfesorQue tal Julián, en qué momento sale este error?
Carlos Julian Grisales Alvarez
Justo en el momento de hacer las peticion de compras:
/api/purchases/all
En el momento de lanzar la apliación no hay problema incluso cuando hago las peticiones de productos, el tema es cuando intento hacer las de compras.
Este es mi codigo en GitHub https://github.com/jgrisalescode/spring-market-API
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
Angel Bernechea
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
Angel Bernechea
jose david parra uribe
Muchas gracias por tu ayuda, me ayudo demasiado!
Mario Martinez Olivares
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.
rodrigo riquelme
Tengo el mismo error y he revisado el código del profe y no lo logró resolverlo
rodrigo riquelme
Mario Martinez pude encontrar la solución en el siguiente link de stackoverflow: https://stackoverflow.com/questions/59518407/json-parse-error-cannot-deserialize-instance-of-com-finance-biblioteca-service
Kevin Santiago Tocora Bermudez
Tengo el siguiente error en Postman y el metodo save tiene el @PostMapping("/save"), no se cual sea mi error.
Sanders Gutiérrez
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.
Agustin Abaroa
me sale null pointer exception en el metodo de save, por alguna razon el getProductos es nulo, ayuda
Alvaro Diego Pérez Vázquez
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:
private Long celular; public Long getCelular() { return celular; } public void setCelular(Long celular) { this.celular = celular; }
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.
@GetMapping("/client/{clientId}") public ResponseEntity<List<Purchase>> getCliente(@PathVariable("clientId") String clientId){ return purchaseService.getByClient(clientId) .filter(purchases -> !purchases.isEmpty()) .map(purchases -> new ResponseEntity<>(purchases,HttpStatus.OK)) .orElse(new ResponseEntity<>(HttpStatus.NOT_FOUND)); }
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
**18:46:49: Executing task 'PlatziMarketApplication.main()'...
Starting Gradle Daemon... Gradle Daemon started in 4 s 279 ms
Task :compileJava UP-TO-DATE Task :processResources UP-TO-DATE Task :classes UP-TO-DATE
Task :PlatziMarketApplication.main()
. ____ _ __ _ _
/\ / ' __ _ () __ __ _ \ \ \
( ( )__ | '_ | '| | ' / ` | \ \ \
\/ __)| |)| | | | | || (| | ) ) ) )
' || .__|| ||| |_, | / / / /
=========||==============|/=////
:: Spring Boot :: (v2.3.4.RELEASE)
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]**
public Purchase save(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
alguien me puede ayudar por favor? me da este error:
> Task :MarketApplication.main() . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v3.1.0) 2023-07-04T21:05:02.857-06:00 INFO 21464 --- [ main] dapv67.market.MarketApplication : Starting MarketApplication using Java 17.0.7 with PID 21464 (C:\Users\alvar\OneDrive - Instituto Tecnol�gico de Ciudad Guzm�n\Escritorio\Spring Boot Course\API con Spring\market\build\classes\java\main started by alvar in C:\Users\alvar\OneDrive - Instituto Tecnol�gico de Ciudad Guzm�n\Escritorio\Spring Boot Course\API con Spring\market) 2023-07-04T21:05:02.862-06:00 INFO 21464 --- [ main] dapv67.market.MarketApplication : The following 1 profile is active: "dev" 2023-07-04T21:05:03.998-06:00 INFO 21464 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode. 2023-07-04T21:05:04.143-06:00 INFO 21464 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 125 ms. Found 2 JPA repository interfaces. 2023-07-04T21:05:05.141-06:00 INFO 21464 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8090 (http) 2023-07-04T21:05:05.159-06:00 INFO 21464 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat] 2023-07-04T21:05:05.159-06:00 INFO 21464 --- [ main] o.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/10.1.8] 2023-07-04T21:05:05.337-06:00 INFO 21464 --- [ main] o.a.c.c.C.[.[localhost].[/market/api] : Initializing Spring embedded WebApplicationContext 2023-07-04T21:05:05.341-06:00 INFO 21464 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 2377 ms 2023-07-04T21:05:05.565-06:00 INFO 21464 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting... 2023-07-04T21:05:05.909-06:00 INFO 21464 --- [ main] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Added connection org.postgresql.jdbc.PgConnection@66a5755 2023-07-04T21:05:05.911-06:00 INFO 21464 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed. 2023-07-04T21:05:05.985-06:00 INFO 21464 --- [ main] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default] 2023-07-04T21:05:06.094-06:00 INFO 21464 --- [ main] org.hibernate.Version : HHH000412: Hibernate ORM core version 6.2.2.Final 2023-07-04T21:05:06.098-06:00 INFO 21464 --- [ main] org.hibernate.cfg.Environment : HHH000406: Using bytecode reflection optimizer 2023-07-04T21:05:06.412-06:00 INFO 21464 --- [ main] o.h.b.i.BytecodeProviderInitiator : HHH000021: Bytecode provider name : bytebuddy 2023-07-04T21:05:06.731-06:00 INFO 21464 --- [ main] o.s.o.j.p.SpringPersistenceUnitInfo : No LoadTimeWeaver setup: ignoring JPA class transformer 2023-07-04T21:05:06.853-06:00 INFO 21464 --- [ 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:00 INFO 21464 --- [ main] o.h.b.i.BytecodeProviderInitiator : HHH000021: Bytecode provider name : bytebuddy 2023-07-04T21:05:07.417-06:00 WARN 21464 --- [ main] org.hibernate.mapping.RootClass : HHH000038: Composite-id class does not override equals(): dapv67.market.persistence.entity.ComprasProductoPK 2023-07-04T21:05:07.417-06:00 WARN 21464 --- [ main] org.hibernate.mapping.RootClass : HHH000039: Composite-id class does not override hashCode(): dapv67.market.persistence.entity.ComprasProductoPK 2023-07-04T21:05:08.411-06:00 INFO 21464 --- [ main] o.h.e.t.j.p.i.JtaPlatformInitiator : HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform] 2023-07-04T21:05:08.415-06:00 INFO 21464 --- [ main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default' 2023-07-04T21:05:08.436-06:00 WARN 21464 --- [ 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:00 INFO 21464 --- [ main] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default' 2023-07-04T21:05:08.445-06:00 INFO 21464 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown initiated... 2023-07-04T21:05:08.461-06:00 INFO 21464 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown completed. 2023-07-04T21:05:08.465-06:00 INFO 21464 --- [ main] o.apache.catalina.core.StandardService : Stopping service [Tomcat] 2023-07-04T21:05:08.498-06:00 INFO 21464 --- [ 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:00 ERROR 21464 --- [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPLICATION FAILED TO START *************************** 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() FAILED Execution failed for task ':MarketApplication.main()'. > Process 'command 'C:/Program Files/Java/jdk-17/bin/java.exe'' finished with non-zero exit value 1 * Try: > Run with --stacktrace option to get the stack trace. > Run with --info or --debug option to get more log output. > Run with --scan to get full insights.