Solucionado (ver solución)
Solucionado
(ver solución)
1
respuesta

Como es que la lista resultado ve reflejado los productos asignados a las categorias?

Ingrese aquí la descripción de esta imagen para ayudar con la accesibilidad Buenas, adjunto una porcion del código que esta adjuntado al final de la clase, por lo que es la versión definitiva del INSTRUCTOR del curso, al final mis comentarios sobre el contenido y el instructor. Entiendo todas las maromas que se hicieron para poder rescatar las categorias y tenerlas en la lista resultado de tal manera que no sea repitente, lo entiendo, las llamadas a FindAny(), stream, orElse y demás, aunque lo entiendo no por el instructor, si no por exhaustiva búsqueda en internet, ya que el instructor fue muy malo preparandonos para entender que estariamos complicando dicha operacion para el futuro de rescatar la categoria. Entiendo que se haya necesitado guardar las categorias para asignarles los productos, lo que no entiendo es al final, no logro entender! ¿Cómo es que en la lista resultado se ven reflejados los cambios de los objetos "categoria"? es decir, como es que la lista resultado tiene objetos de categoria ya con su lista de productos, es que esto funciona por referencia en memoria y por eso es que se refleja? que no estoy entendiendo.

Viendo el flujo de las operaciones: Se analiza si en la lista resultado ya existe una categoria cuyo ID sea igual al del ID presente en el resultSet, si no, entonces se lo añade a la lista resultados, LUEGO DE AÑADIR a resultado, a dicha categoria se le acopla la lista de los productos, esto parece funcionar! puesto que lo corres y las querys n+1 son eliminadas, pero no logro entender como tiene sentido, no soy para nada un empezado en logica POO ni logica programacional, pero no cabe.

Dicho esto, muchas quejas referentes al instructor, si bien este rubro trata mucho sobre autodidaccia, me parece que se pudo haber sobrellevado mejor, explicando un poco mejor el que de las funciones o el porque de la complejidad, ya que muchas veces, a primera vista, no se veia necesario, solo se entendia mucho despues. Siguiente, muchos cambios tras bambalinas del codigo fuente, yo tengo una queja previa sobre el tema de las conexiones, cuando descargue el proyecto del curso final, vi que habia codigo cambiado, siendo que yo habia seguido PASO A PASO cada linea escrita por el instructor, claro, a mi no me funcionaba, a el si, son cambios que yo me propuse cambiar por mi cuenta, pero no lo hice ya que al instructor me funcionaba, y a el si, estas cosas no deberian pasarse muy por alto.

Además que, aunque logre entender como es que esto funciona, esto se pudo haber escrito en un codigo mas legible, si, quiza no le introdujo varios conceptos avanzados al estudiante, pero también evitaría consultas como estas, que ni chatGPT me sabe explicar, por eso recurro a esto, siento que se pudo haber llevado mejor

1 respuesta
solución!

Hola Gabriel,

Entiendo tus preocupaciones y frustraciones. A veces, el código puede ser un poco confuso, especialmente cuando se trata de conceptos avanzados como los que estás tratando. Vamos a intentar aclarar tu duda.

Como ya lo estabas intuyendo, el comportamiento que describes es debido a cómo Java maneja los objetos y sus referencias. Cuando creas un objeto en Java y lo asignas a una variable, lo que realmente estás haciendo es almacenar una referencia a ese objeto en la variable, no el objeto en sí. Esto significa que si tomas esa referencia y la asignas a otra variable, ambas variables ahora apuntarán al mismo objeto. Entonces, si modificas el objeto a través de una de las variables, los cambios se reflejarán cuando accedas al objeto a través de la otra variable.

En el código que has compartido, se está creando un objeto "categoria" y se añade a la lista "resultado". Luego, se añade una lista de productos a la "categoria". Debido a que "resultado" contiene una referencia al objeto "categoria", cualquier cambio que hagas en "categoria" se reflejará en la "categoria" que está en "resultado".

Espero que ahora estos conceptos hayan quedado más claros para ti, me gustaría felicitarte por tu raciocinio y por tu incesante búsqueda de conocimiento que va más allá de lo abordado en el curso es sobre eso que se trata el día a día de nosotros como programadores, además de eso me gustaria agradecer tus feedbacks referente al curso y al instructor, los cuáles ya han sido repasados para el equipo responsable, de ahora en adelante estaremos enfocados en mejorar sobre todos los puntos que mencionaste y cada vez más ofrecer contenidos que ayuden a nuestros alumnos.