Estou com o mesmo erro do Guilherme, no tópico fechado abaixo, porém quando gerei a criação do HashCode e equals passou a dar outro erro no EmbeddedId O código ficou assim:
package br.com.alura.loja.modelo;
import java.util.Objects;
import javax.persistence.Embeddable;
@Embeddable
public class CategoriaId {
private String nome;
private String tipo;
public CategoriaId(String nome, String tipo) {
this.nome = nome;
this.tipo = tipo;
}
public CategoriaId() {
}
@Override
public int hashCode() {
return Objects.hash(nome, tipo);
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
CategoriaId other = (CategoriaId) obj;
return Objects.equals(nome, other.nome) && Objects.equals(tipo, other.tipo);
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getTipo() {
return tipo;
}
public void setTipo(String tipo) {
this.tipo = tipo;
}
}
E este é o erro que esta dando:
INFO: HHH000115: Hibernate connection pool size: 20 (min=1)
mai. 25, 2022 1:59:29 PM org.hibernate.dialect.Dialect <init>
INFO: HHH000400: Using dialect: org.hibernate.dialect.MySQL8Dialect
Exception in thread "main" java.lang.ExceptionInInitializerError
at br.com.alura.testes.CadastroDeProduto.Cadastrar(CadastroDeProduto.java:48)
at br.com.alura.testes.CadastroDeProduto.main(CadastroDeProduto.java:19)
Caused by: javax.persistence.PersistenceException: [PersistenceUnit: loja] Unable to build Hibernate SessionFactory
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.persistenceException(EntityManagerFactoryBuilderImpl.java:1336)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1262)
at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:56)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:79)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:54)
at br.com.alura.loja.util.JPAutil.<clinit>(JPAutil.java:8)
... 2 more
Caused by: org.hibernate.MappingException: Composite-id class must implement Serializable: br.com.alura.loja.modelo.CategoriaId
at org.hibernate.mapping.RootClass.checkCompositeIdentifier(RootClass.java:293)
at org.hibernate.mapping.RootClass.validate(RootClass.java:276)
at org.hibernate.boot.internal.MetadataImpl.validate(MetadataImpl.java:354)
at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:465)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1259)
... 6 more
Parece que este erro afetou meu pom.xml:
Segue aqui o código Categoria :
package br.com.alura.loja.modelo;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.Table;
@Entity
@Table(name = "categorias")
public class Categoria {
// @Id
// @GeneratedValue(strategy = GenerationType.IDENTITY)
// private Long id;
@EmbeddedId
private CategoriaId id;
public Categoria() {
super();
}
public String getNome() {
return this.id.getNome();
}
public Categoria(String nome) {
this.id = new CategoriaId(nome, "tipo");
}
}