2
respuestas

Duda Relaciones

La tabla items_pedido se relaciona con productos N:1 y con pedido N:1 pero entonces en la entidad de Pedido se agrega la anotacion @OneToMany(mappedBy="pedido"), pero en la relación con producto no se agrega nada, otro ejemplo es en la relación Cliente Pedido, porque en las entidades Producto y Cliente no se agregan este tipo de anotaciones?

2 respuestas

Hola Oscar,

Buena pregunta, las anotaciones @OneToMany, @ManyToOne, @OneToOne y @ManyToMany en JPA se utilizan para mapear las relaciones entre las entidades.

La razón de esto es que las anotaciones se utilizan para indicar la "propiedad" de la relación. En otras palabras, definen en qué lado de la relación se encuentra la clave foránea. En tu caso, la entidad Pedido tiene una relación @OneToMany con la entidad items_pedido, lo que significa que un Pedido puede tener muchos items_pedido. Aquí, la entidad Pedido es el propietario de la relación, por lo que se coloca la anotación @OneToMany.

Por otro lado, en la relación entre las entidades items_pedido y Producto, la entidad items_pedido es la propietaria de la relación, por lo que no necesitamos colocar ninguna anotación en la entidad Producto. Esto se debe a que la entidad items_pedido tiene una relación @ManyToOne con la entidad Producto, lo que significa que un items_pedido puede tener un solo Producto.

Lo mismo ocurre con la relación entre las entidades Pedido y Cliente. En este caso, la entidad Pedido es la propietaria de la relación, por lo que no necesitamos colocar ninguna anotación en la entidad Cliente.

Espero que esto aclare tu duda. Si tienes alguna pregunta adicional, no dudes en preguntar.

Mucho éxito en todo lo que te propongas. ¡Vamos juntos!

Si este post te ayudó, por favor, marca como solucionado ✓. Continúa con tus estudios

Muchas gracias por la respuesta entendido, mi siguiente duda es... al hacer el mapeo de las entidades se crean las tablas en la base de datos basándose en las propiedades de cada entidad, por ejemplo la tabla producto tiene cada propiedad de la entidad producto Id, descripcion, fecha_de_registro, nombre, precio, categoria_id siendo categoria_id una foreignKey de la tabla categoria, así mismo sucede con categoria que tiene id, y nombre también con cliente que tiene id, nombre, dni es decir cada atributo es mapeado para crear la tabla con los mismo atributos pero en la consulta del relatorio que es la siguiente ... "SELECT producto.nombre, " + "SUM(item.cantidad), " + "MAX(pedido.fecha) " + "FROM Pedido pedido " + "JOIN pedido.items item " + "JOIN item.producto producto " + "GROUP BY producto.nombre " + "ORDER BY SUM(item.cantidad) DESC" estamos tomando valores que no están en las tablas como por ejemplo pedido.items que esta después del primer JOIN osea en esa tabla no hay una propiedad items aunque si existe una lista de items en la entidad tengo entendido que las consultas se realizan sobre las tablas y para terminar de donde sale item.cantidad?, me refiero al parámetro que está dentro de SUM(item.cantidad), de donde salen esos item.cantidad si ni siquiera hay una tabla llamada items y de donde sale pedido items si no hay una propiedad items dentro de la tabla?, el instructor no explica esa consulta y no la entiendo en absoluto .