Problemas ao salvar dados, relacionamento OneToMany
05/01/2011 00:00
0
Sou iniciante na programação e estou usando grails, e surgiu o seguinte problema que não consegui encontrar a solução, talvez também por falta de conhecimento e não utilizar as palavras certas durante a busca, enfim, estou utilizando java para a modelagem com hibernate e annotations, tenho a classe colaborador que se relaciona com a experiencia e coloquei assim nas classes:

Colaborador:

@OneToMany
private List<Experiencia> experiencias;

Experiencia:

@ManyToOne
Colaborador colaborador;

Ele cria as tabelas no MySql: colaborador, experiencia e colaborador_experiencias, onde nesta última deveria salvar o relacionamento entre colaborador e experiencia, só que ela fica vazia :/
Eu sei que se utilizasse o GORM para a modelagem seria mais fácil, mas tenho que usar o Java mesmo devido à alguns detalhes futuros na minha aplicação em que o hibernate será necessário.

Desde já agradeço pela ajuda <!-- s:) --><img src="{SMILIES_PATH}/icon_smile.gif" alt=":)" title="Smile" /><!-- s:) -->
Tags: Grails


0
Opa,

mas neste caso, no momento de criação da tabela, ela fica vazia mesmo, não?
Só vai ser preenchida depois, quando você persistir os dados. Entendi direito?


0
Sim.. mas eu fiz uns testes e nada =/
os dados são salvos no colaborador e na experiencia mas não na tabela de relacionamento colaborador_experiencias


0
Tem como você postar algum código aqui pro pessoal dar uma olhada?


0
Classe Colaborador:
@Entity
public class Colaborador implements Serializable {

private static final long serialVersionUID = 2351103499739892758L;

@Id
@GeneratedValue
private Integer id;

@Column(nullable = false )
private String nome;

@Column(nullable = false )
private String cpf;

@Column(nullable = true)
private String telefone;

@Column(nullable = false )
private String endereco;

@Column(nullable = false )
private String email;

@OneToMany
private List<Experiencia> experiencias;

@OneToMany
private List<Formacao> formacoes;
//getters and setters

Classe Experiencia:

@Entity
public class Experiencia implements Serializable {

private static final long serialVersionUID = -8324915179544550870L;

@Id
@GeneratedValue
private Integer id;

@Column (nullable = false)
private String funcao;

@Column (nullable = false)
private String nomeEmpresa;

@Column (nullable = true)
private String contato;

@Column (nullable = false)
private Date dataEntrada;

@Column (nullable = false)
private Date dataSaida;

@Column (nullable = false)
private Double ultimoSalario;

@ManyToOne
Colaborador colaborador;
//getters and setters

Método para salvar ExperienciaController:

def save = {
def experiencia = new Experiencia(params)
if(experiencia.save(flush&#58; true)) {
flash.message = &quot;Experiencia ${experiencia.id} criada&quot;
redirect(action&#58;show,id&#58;experiencia.id)
}
else {
flash.message = &quot;Digite todos os campos&quot;
render(view&#58;'create',model&#58;[experiencia&#58;experiencia])
}
}


0
Opa,

olha, não sei se construções do tipo


def experiencia = new Experiencia(params)

vai funcionar 100% com seu código Java.

Outra dúvida: você tem implementado o método save em todas as suas classes?
Porque aqui, novamente, estas classes não vão ser injetadas pelo método save do Grails, visto que podem estar em outro pacote.
Além disto, se não me engano, o Grails só vai injetar métodos de persistência em classes Groovy de domínio.

No caso, o ideal mesmo é você simplesmente acessar os métodos das suas classes Java pelo código Groovy mesmo. Só rola de usar o GORM como GORM mesmo no Grails se você tiver classes Groovy ai. Isto sem mencionar que as anotações que você incluiu, precisam ser configuradas no SessionFactory (ou EntityManager, no caso do JPA) do Hibernate, e não pelo Grails.

Caso queira usar o GORM em classes Java convencionais, que vão estar em seu próprio pacote OU como código fonte no diretório src/java, você vai ter de pesquisar sobre como usar este componente no modo stand alone.

Eu tenho dois posts sobre o uso de código legado (ou separado, como no seu caso) com Grails.
Seguem os links:
<!-- m --><a class="postlink" href="http://www.itexto.net/devkico/?p=330">http://www.itexto.net/devkico/?p=330</a><!-- m -->

<!-- m --><a class="postlink" href="http://www.itexto.net/devkico/?p=739">http://www.itexto.net/devkico/?p=739</a><!-- m -->


0
Tente assim:

@Entity
public class Colaborador implements Serializable {
//...
@OneToMany(cascade = {CascadeType.ALL})
private List<Experiencia> experiencias;
//...
}


@Entity
public class Experiencia implements Serializable {
//...
@ManyToOne
Colaborador colaborador;
//...
}


Escrevi algo uns tempos atrás que pode lhe ser útil: <!-- m --><a class="postlink" href="http://bit.ly/icnOWv">http://bit.ly/icnOWv</a><!-- m -->
E não esqueça da documentação do Hibernate: <!-- m --><a class="postlink" href="http://bit.ly/dPcOsR">http://bit.ly/dPcOsR</a><!-- m -->
06/01/2011 00:00



Ainda não faz parte da comunidade???

Para se registrar, clique aqui.


Aprenda Groovy e Grails com a Formação itexto!

Newsletter Semana Groovy

Assinar

Envie seu link!


Livro de Grails


/dev/All

Os melhores blogs de TI (e em português) em um único lugar!

 
Creative Commons
RSS Grails Brasil é mantido por itexto Consultoria.
Em caso de problemas contacte Henrique Lobo Weissmann (Kico) por e-mail: kico@itexto.com.br
Todo o conteúdo presente neste site adota o Creative Commons como licença padrão.
Ver: 4.14.0
itexto