Olá Pessoal, tudo bom?
Hoje iremos falar sobre um erro de Mapeamento de Entidades JPA, mais especificamente da exception ids for this class must be manually assigned before calling save().
Descrição do Erro
Ao mapear entidades via JPA para realizar a comunicação entre um banco de dados e o Java nós utilizamos a annotation javax.persistence.@GeneratedValue para indicar ao JPA que este atributo possui uma forma automática de gerar uma primary key para um tabela de um banco de dados. Essa forma de geração pode ser de três estratégicas diferentes de acordo com o Enum javax.persistence.GenerationType: IDENTITY, SEQUENCE e TABLE.
Não inserindo esta annotation, ocorrerá um erro com uma stack trace parecida:
org.hibernate.id.IdentifierGenerationException: ids for this class must be manually assigned before calling save(): br.pucpr.bsi.prog6.ticketsEventosBSI.model.Artista
at br.pucpr.bsi.prog6.ticketsEventosBSI.dao.PatternDAO.insert(PatternDAO.java:96)
at br.pucpr.bsi.prog6.ticketsEventosBSI.bc.ArtistaBC.insert(ArtistaBC.java:29)
at br.pucpr.bsi.prog6.ticketsEventosBSI.tests.laboratorioBC.TesteArtistaBC.criar(TesteArtistaBC.java:39)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
… 35 more
Solução
A solução para este erro é inserir a annotation javax.persistence.@GeneratedValue dentro da entidade mapeada. Toda entidade deve possuir em seu atributo identificador a estratégia de geração de chaves automáticas por um banco de dados, como mostra o código abaixo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
package br.com.mauda.example.model; import java.io.Serializable; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; @Entity public class Artista implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String nome; //outros atributos, métodos e construtores } |
finally{
Caso você achou mais alguma solução para essa exception, por favor deixe nos comentários abaixo!
Duvidas ou sugestões? Deixe seu feedback! Isso ajuda a saber a sua opinião sobre os artigos e melhorá-los para o futuro! Isso é muito importante!
Até um próximo post!
Leave a Reply