Erro ao persistir entidades cascatedas com eclipselink

3 respostas
zorba

Bom dia pessoal!
quando eu vou salvar uma certa classe, acontece esse erro:

[EL Warning]: Exception [EclipseLink-6023] (Eclipse Persistence Services - 2.1.2.v20101206-r8635): org.eclipse.persistence.exceptions.QueryException
Exception Description: The list of fields to insert into the table [DatabaseTable(grupotelefone)] is empty.  You must define at least one mapping for this table.

eu estou tentando salvar um cliente. as classes estão assim:

Cliente: http://pastie.org/1501994
GrupoTelefone: http://pastie.org/1501995
Telefone: http://pastie.org/1501996

ja debuguei, e o cliente tem sim um grupotelefone, com a lista de telefones correta. estou usando firePropertChange nos setters das classes, por causa dos binds (é uma aplicação desktop)

alguem sabe o que fazer?
obrigado :smiley:

3 Respostas

zorba

alguem?

H

Olá zorba,

dando uma olhada por cima, reparei que o ClienteFornecedor não tem @id. Por acaso o BaseEntityObject é uma @MappedSuperclass com id? Se for os outros não deviam possuir @id.

//GrupoTelefone 
@OneToMany(mappedBy = "grupotelefone_id", fetch = FetchType.LAZY,
        cascade={CascadeType.ALL, CascadeType.PERSIST}) // talvez não cause o erro, mas é pelo menos redundante, pois CascadeType.ALL já tem CascadeType.PERSIST
  private List<Telefone> telefones = new ArrayList<Telefone>();

Vc usa o “GrupoTelefone” para colocar mais campos? Se não, telefone pode pertencer a diversos clientes e diversos clientes podem ter o mesmo telefone? Sim, então penso eu que vc deveria fazer um mapeado NxN assim:

//ClienteFornecedor 
@ManyToMany(mappedBy = "clienteFornecedorList")
private List<Telefone> telefoneList;
//Telefone 
@ManyToMany
@JoinTable(name="GrupoTelefone",  
     joinColumns={@JoinColumn(name="cliente_fornecedor_id")},
     inverseJoinColumns={@JoinColumn(name="telefone_id"))})
private List< ClienteFornecedor >  clienteFornecedorList;
zorba

Ola hulk :smiley:
o clientefornecedor tem um Id sim. eu só coloquei a parte relevante da classe :slight_smile:
eu não posso mudar o mapeamento :frowning:
bem, na verdade eu resolvi (ou quase) o problema: o eclipselink verifica se o objeto que vai para a tabela não está vazio. como a tabela grupotelefone possui apenas um Id que é referenciado em outros locais, e como eu estou criando um novo objeto, os campos estão nulos, e não deixa gravar. vou abrir um ticket no eclipse quanto a isso, mas por enquanto, criei um campo qualquer que permite null.

Criado 27 de janeiro de 2011
Ultima resposta 31 de jan. de 2011
Respostas 3
Participantes 2