Hola, me di cuenta que una vez actualizado el código con lo visto en este video este no reconstruye la tabla productos, haciendo que solo intente insertar de nuevo un nuevo producto, quizás por eso el error Incorrect integer value: 'CELULARES' for column 'categoria' at row 1. Asi que elimine la tabla para dejar que el hibernate la creará e insertará nuevos registros por mi.
Lo que quiero saber es porque no me funciono igual que el instructor y porque si lo ejecuto de nuevo lo inserta como un nuevo registro, teniendo así duplicados no por id, les comparto mi codigo:
<?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="com.mysql.jdbc.Driver"/>
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/tienda"/>
<property name="javax.persistence.jdbc.user" value="miUser"/>
<property name="javax.persistence.jdbc.password" value="miPassword"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL8Dialect"/>
<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.hbm2ddl.auto" value="update"/>
</properties>
</persistence-unit>
</persistence>
@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) {
this.nombre = nombre;
this.descripcion = descripcion;
this.precio = precio;
this.categoria = categoria;
}
....
public enum Categoria {
SOFTWARE,
CELULARES,
LIBROS,
}
public class RegistroDeProducto {
public static void main(String[] args) {
Producto celular = new Producto("Samsung", "Telefono usado", new BigDecimal("1000"), Categoria.CELULARES);
EntityManager em = JPAUtils.getEntityManager();
ProductoDao productoDao = new ProductoDao(em);
em.getTransaction().begin();
productoDao.guardar(celular);
em.getTransaction().commit();
em.close();
}
}
public class JPAUtils {
private static EntityManagerFactory FACTORY = Persistence.createEntityManagerFactory("tienda");
public static EntityManager getEntityManager() {
return FACTORY.createEntityManager();
}
}
public class ProductoDao {
private EntityManager em;
public ProductoDao(EntityManager em) {
this.em = em;
}
public void guardar(Producto producto) {
this.em.persist(producto);
}
}