Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Solucionado (ver solución)
Solucionado
(ver solución)
3
respuestas

[Duda] Mi código crea la tabla, pero no la actualiza :(

Captura e pantalla de la salida de consolaSegún la consola, mi código crea la tabla, pero en ningún momento actualiza los datos

Mi clase IngresoProducto

package com.alura.latam.tienda.test;

import java.math.BigDecimal;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

import com.alura.latam.tienda.modelo.Producto;

public class IngresoProducto {


    public static void main(String[] args) {

        Producto celular = new Producto();
celular.setNombre("Xiaomi Redmi");
celular.setDescripcion("Producto usado");
celular.setPrecio(new BigDecimal("800"));

EntityManagerFactory factory = Persistence.
createEntityManagerFactory("tienda");

EntityManager em = factory.createEntityManager();
em.getTransaction().begin();
em.persist(celular);
em.getTransaction().commit();
em.close();

}
    
}

Mi archivo persistence.xml

<?xml version="1.0" encoding="UTF-8"?>

<persistence version="2.2"
    xmlns="http://xmlns.jcp.org/xml/ns/persistence"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_2.xsd">

<persistence-unit name="tienda" transaction-type="RESOURCE_LOCAL">
        <properties>
<property name="javax.persistence.jdbc.driver" value="org.h2.Driver"/>
    <property name="javax.persistence.jdbc.url" value="jdbc:h2:mem:tienda"/>
    <property name="javax.persistence.jdbc.user" value="sa"/>
    <property name="javax.persistence.jdbc.password" value=""/>

<property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/>
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.hbm2ddl.auto" value="update"/>        
        </properties>
    </persistence-unit>
</persistence>

Mi clase Producto

package com.alura.latam.tienda.modelo;

import java.math.BigDecimal;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name="productos")
public class Producto{
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Long id;

    private String nombre;
    private String descripcion;
    private BigDecimal precio;

    public Long getId() {    return id;}

    public void setId(Long id) {    this.id = id;}

    public String getNombre() {    return nombre;}

    public void setNombre(String nombre) {this.nombre = nombre;}

    public String getDescripcion() {return descripcion;}

    public void setDescripcion(String descripcion) {
        this.descripcion = descripcion;
}

    public BigDecimal getPrecio() {return precio;}

    public void setPrecio(BigDecimal precio) {this.precio = precio;}
}

Mi archivo POM.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.latam.allura.tienda</groupId>
  <artifactId>tienda</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <build>
      <plugins>
          <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-compiler-plugin</artifactId>
              <version>3.11.0</version>
              <configuration>
                  <release>11</release>
              </configuration>
          </plugin>
      </plugins>
  </build>
  <dependencies>
      <dependency>
          <groupId>org.hibernate</groupId>
          <artifactId>hibernate-entitymanager</artifactId>
          <version>5.6.14.Final</version>
      </dependency>
      <dependency>
         <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <version>2.1.214</version>
      </dependency>
  </dependencies>
</project>
3 respuestas

Hola Jerónimo,

La tabla y persistiendo el objeto estan correctos. Sin embargo, cuando dices que la tabla no se actualiza, ¿te refieres a que no se agregan nuevos registros cuando ejecutas el código más de una vez, o que no puedes ver los cambios en la base de datos después de que se ejecuta el código?

Si el problema es el primero, es importante tener en cuenta que estás utilizando una base de datos en memoria (jdbc:h2:mem:tienda). Las bases de datos en memoria son volátiles, lo que significa que los datos se pierden cuando la aplicación se cierra. Por lo tanto, cada vez que ejecutas tu aplicación, estás trabajando con una base de datos vacía. Si necesitas que los datos persistan entre ejecuciones, podrías considerar usar una base de datos persistente.

Si el problema es el segundo, es posible que estés consultando la base de datos antes de que la transacción se haya confirmado. En tu código, estás confirmando la transacción con em.getTransaction().commit(). Después de esta línea, los cambios deberían ser visibles en la base de datos. Si estás consultando la base de datos antes de esta línea, no verás los cambios.

Espero haber ayudado. Mucho éxito en todo lo que te propongas y si tienes más duda aquí estaremos para apoyarte.

¡Vamos juntos!

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

Hola Adriana, gracias por tu aclaración, pero a lo que me refiero es que tengo la propiedad show SQL activada, pero en la consola solamente aparece la creación de la tabla y no la confirmación de que los datos del celular hayan sido insertados en ella

Captura de pantalla de la consola del instructor

esta imagen es la consola del instructor, a mi no me aparece esa ultima linea que confirma la inserción de los productos, sera un tema de la consola simplemente? o definitivamente los datos no han sido guardados.

solución!

Ya lo pude solucionar, el problema era que antes puse el archivo persistence.xml en el path del proyecto en un intento de solucionar otro error que tenia, y debido a eso me saltaba un error en el proyecto que decía que el formato no era compatible para ser leído en el path, lo removí y ya adiciona los items a la base de datos sin ningún problema :D