Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
2
respuestas

[Duda] no puedo formar mi tabla

INFO: HHH000412: Hibernate ORM core version 5.6.14.Final ago 24, 2023 11:26:09 A. M. org.hibernate.annotations.common.reflection.java.JavaReflectionManager INFO: HCANN000001: Hibernate Commons Annotations {5.1.2.Final} ago 24, 2023 11:26:10 A. M. org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure WARN: HHH10001002: Using Hibernate built-in connection pool (not for production use!) ago 24, 2023 11:26:10 A. M. org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator INFO: HHH10001005: using driver [org.h2.Driver] at URL [jdbc:h2:mem:tienda] ago 24, 2023 11:26:10 A. M. org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator INFO: HHH10001001: Connection properties: {password=****, user=sa} ago 24, 2023 11:26:10 A. M. org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator INFO: HHH10001003: Autocommit mode: false ago 24, 2023 11:26:10 A. M. org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PooledConnections INFO: HHH000115: Hibernate connection pool size: 20 (min=1) ago 24, 2023 11:26:10 A. M. org.hibernate.dialect.Dialect INFO: HHH000400: Using dialect: org.hibernate.dialect.H2Dialect ago 24, 2023 11:26:10 A. M. org.hibernate.tuple.PojoInstantiator INFO: HHH000182: No default (no-argument) constructor for class: com.latam.alura.tiendita.modelo.Producto (class must be instantiated by Interceptor) ago 24, 2023 11:26:10 A. M. org.hibernate.resource.transaction.backend.jdbc.internal.DdlTransactionIsolatorNonJtaImpl getIsolatedConnection INFO: HHH10001501: Connection obtained from JdbcConnectionAccess [org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess@74fab04a] for (non-JTA) DDL execution was not in auto-commit mode; the Connection 'local transaction' will be committed and the Connection will be set into auto-commit mode. ago 24, 2023 11:26:10 A. M. org.hibernate.resource.transaction.backend.jdbc.internal.DdlTransactionIsolatorNonJtaImpl getIsolatedConnection INFO: HHH10001501: Connection obtained from JdbcConnectionAccess [org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess@1a1f5f71] for (non-JTA) DDL execution was not in auto-commit mode; the Connection 'local transaction' will be committed and the Connection will be set into auto-commit mode. ago 24, 2023 11:26:10 A. M. org.hibernate.engine.transaction.jta.platform.internal.JtaPlatformInitiator initiateService INFO: HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform]

cambie 
    <property name="hibernate.hbm2ddl.auto" value="create-drop"/>	

que me sugieren?  saludos.
2 respuestas

Hola César,

Por el log que compartiste, parece que Hibernate no puede crear una instancia de tu clase Producto porque no tiene un constructor sin argumentos. En Hibernate, es necesario que todas las clases de entidades tengan un constructor público o protegido sin argumentos, ya que Hibernate lo necesita para instanciar tus objetos.

Aquí tienes un ejemplo de cómo podría verse tu clase Producto con un constructor sin argumentos:

@Entity
public class Producto {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String nombre;
    private double precio;

    // Constructor sin argumentos
    public Producto() {
    }

    // Constructor con argumentos
    public Producto(String nombre, double precio) {
        this.nombre = nombre;
        this.precio = precio;
    }

    // getters y setters
}

En cuanto a la propiedad hibernate.hbm2ddl.auto, el valor create-drop indica a Hibernate que cree las tablas necesarias al iniciar la aplicación y que las elimine al finalizar. Si estás experimentando problemas con esto, podrías intentar cambiarlo a update, lo que hará que Hibernate solo actualice la estructura de la base de datos si es necesario, en lugar de eliminarla y recrearla cada vez.

Espero que esto solucione tu problema. Mucho éxito en todo lo que te propongas y si tienes alguna duda aquí estaremos para apoyarte.

¡Vamos juntos!

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

buenas tardes, asi tengo mi clase producto. y asi me manda ese mensaje la consola. Saludos.

package com.latam.alura.tiendita.modelo;

import java.math.BigDecimal; import java.time.LocalDate;

import javax.persistence.Entity; import javax.persistence.EnumType; import javax.persistence.Enumerated; 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;
private LocalDate fechaDeRegistro = LocalDate.now();
@Enumerated(EnumType.STRING)
private Categoria categoria;




public Producto(String nombre, String descripcion, BigDecimal precio, Categoria categoria) {
    super();
    this.nombre = nombre;
    this.descripcion = descripcion;
    this.precio = precio;
    this.categoria = categoria;
}



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;
}

}