Erro mapeamento

5 respostas
O

Amigos eu tenho uma EntidadeMunicipio que cada municipio tem uma EntidadeUf e a Uf tem List porem qualquer Entidade que eu tenho salvar com o municipio da esse erro:

Null primary key encountered in unit of work clone [com.worksystem.comum.persistencia.EntidadeUf@25].

Abraços!!

5 Respostas

partenon

Como estao mapeados seus IDs? Toda entidade deve possuir um ID mapeado, e o ID da “EntidadeUf” esta nulo ao tentar salvar ao banco (o que significa que vc esta provavelmente tentando usar uma ID natural, como a sigla do estado).

O

MUNICIPIO

@Entity 
@Table(name = "tab_municipio", schema = "apl_comum") 

public class EntidadeMunicipio implements Municipio, Serializable {
    @Id
    @Column(name = "tmu_cod_municipio")
    private Integer codigo;
    @Column(name = "tmu_nome")
    private String nome;
    @ManyToOne 
    @JoinColumn(name = "tmu_tuf_cod_uf")
    private EntidadeUf uf;

UF

@Entity 
@Table(name = "tab_uf", schema = "apl_comum") 

public class EntidadeUf implements Uf, Serializable {
    @Id
    @Column(name = "tuf_cod_uf")
    private Integer codigo;
    @Column(name = "tuf_nome")
    private String nome;
    @Column(name = "tuf_sigla")
    private String sigla;
    @OneToMany(mappedBy = "uf",cascade = CascadeType.ALL)
    private List<EntidadeMunicipio>municipios;
partenon

Imagino que voce nao esta especificando o valor do ID manualmente, entao. Se voce quer que o seu banco de dados crie o ID automaticamente (auto numeracao, por exemplo), voce precisa adicionar @GeneratedValue ao seu ID. Assim:

@Id  
    @GeneratedValue
    @Column(name = "tmu_cod_municipio")  
    private Integer codigo;  
...
    @Id  
    @GeneratedValue
    @Column(name = "tuf_cod_uf")  
    private Integer codigo;
O

Amigos eu já tenho todos os estados e municipios, supostamente naum precisarei INSERIR, só buscar. Porque esse erro na hora de eu tentar salvar outra entidade que possa ter um municipio por exemplo.

abraços

partenon

Se uma outra entidade tem um municipio, ela precisa saber qual o ID do municipio para persistir este relacionamento no banco de dados, certo? :slight_smile:

Toda entidade precisa de um identificador, que precisa estar marcado com “@Id”. Pela definicao, um ID nao pode ser nulo, entao, o Hibernate verifica isso ao persistir (e este eh o erro que voce esta vendo). O valor do ID pode ser “gerado automaticamente” ou pode ser uma “chave natural” (como a sigla do estado, por exemplo). Pra saber qual propriedade deve receber o “@Id”, tente ver qual eh a chave primaria para a tabela de estados.

Mas de uma lida na documentacao, em especial a parte de mapeamento de identificadores: http://docs.jboss.org/hibernate/stable/annotations/reference/en/html_single/#entity-mapping-identifier

Criado 27 de junho de 2010
Ultima resposta 28 de jun. de 2010
Respostas 5
Participantes 2