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

Error

me dice la consola que el valor "ID " no ppermite valores nulo y lo entidno se porque pero incluso copie y pegue el codigo del procefor y ni asi queda

package com.latam.alura.tienda.prueba;

import java.math.BigDecimal;

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

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

public class RegistroDeProducto {

    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();

    }
}

este es el codigo de la prueba

<?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.show.sql" value="true"/>
            <property name="hibernate.hbm2ddl.auto" value="update"/>
            <property name="hibernate.dialect"
                value="org.hibernate.dialect.H2Dialect" />
        </properties>
    </persistence-unit>
</persistence>

este es el persistence.xml

package com.latam.alura.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;
    }
}

y esta es la clase producto, todo esta igual y me sigue saliendo el error de id no valido osea se que el error es que no se esta generando de forma automatica el valor de id pero no se poque

Ingrese aquí la descripción de esta imagen para ayudar con la accesibilidad Ingrese aquí la descripción de esta imagen para ayudar con la accesibilidad

2 respuestas

Hola José,

¿Ha podido resolver este problema? Por lo que veo, estás haciendo todo correctamente. Tu código parece estar bien y debería funcionar. Sin embargo, el error que estás obteniendo indica que el valor de "ID" no puede ser nulo. Esto puede suceder si la base de datos no está generando automáticamente el valor de ID como debería.

En tu clase Producto, estás utilizando la anotación @GeneratedValue(strategy = GenerationType.IDENTITY) para la generación automática del ID. Esta estrategia depende de la generación de ID autoincremental de la base de datos subyacente. En tu caso, estás utilizando H2, que debería soportar esta característica.

Una posible causa del problema podría ser que la tabla productos ya exista en tu base de datos H2 con una configuración diferente (por ejemplo, sin autoincremento para el ID). Intenta eliminar la tabla productos si existe, y luego vuelve a ejecutar tu programa para que Hibernate pueda crear la tabla con la configuración correcta.

Otra posibilidad es que haya algún problema con la configuración de tu archivo persistence.xml. Asegúrate de que la unidad de persistencia tienda esté correctamente configurada y que esté apuntando a la base de datos correcta.

Actualiza tu proyecto y vuelve a comprobarlo. Espero que esto te ayude a resolver el 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.

Si lo resolvi resulta que solo me habia equivocado en esta linea

 <property name="hibernate.show.sql" value="true"/>

no es un"." es "_" gracias

actualizacion resulta que por alguna razon no puedo generrar valor con IDENTITY soo con AUTO