Erro ao usar o JPA[Resolvido]

4 respostas
F

Boa noite pessoal, estou com um problema para fazer uma inserção de dados via hibernate.
Pelo log ele esta gerando o código SQL com um campo errado, este campo é um campo de relacionamento, gostaria que me ajudassem a solucionar este problema.

Segue o codigo:
Classe Pesquisa

package br.com.JPA.model;

import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;


@Entity
@Table(name="tb_pesquisa")

public class Pesquisa {
	@Id
	@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="seq_id_pesq")
	@SequenceGenerator(name="seq_id_pesq", sequenceName="seq_id_pesq", allocationSize=1)
	@Column(name="id_pesq")
	private long id;
	@Column(name="pergunta_pesq")
	private String pergunta;
	@Column(name="descricao_pesq")
	private String descricao;
	@OneToMany(fetch=FetchType.EAGER, cascade=CascadeType.PERSIST)
	//@JoinColumn(name="id_pesq")
	private List<Opcao> opcoes;
	
	public long getId() {
		return id;
	}
	public void setId(long id) {
		this.id = id;
	}
	public String getPergunta() {
		return pergunta;
	}
	public void setPergunta(String pergunta) {
		this.pergunta = pergunta;
	}
	public String getDescricao() {
		return descricao;
	}
	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}
	public List<Opcao> getOpcoes() {
		return opcoes;
	}
	public void setOpcoes(List<Opcao> opcoes) {
		this.opcoes = opcoes;
	}
	
	
}
Classe Opcao
package br.com.JPA.model;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;

@Entity
@Table(name="tb_opcao")
public class Opcao {
	
	@Id
	@SequenceGenerator(name="seq_id_opcao", sequenceName="seq_id_opcao", allocationSize=1)
	@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seq_id_opcao")
	@Column(name="id_opcao")
	private long id;
	@Column(name="descricao_opcao")
	private String descricao;
	@ManyToOne
	private Pesquisa pesquisa;
	
	public Opcao(){
		
	}
	
	public Opcao(String descricao){
		this.descricao = descricao;
	}
	
	/**
	 * @return the id
	 */
	public long getId() {
		return id;
	}
	/**
	 * @param id the id to set
	 */
	public void setId(long id) {
		this.id = id;
	}
	/**
	 * @return the descricao
	 */
	public String getDescricao() {
		return descricao;
	}
	/**
	 * @param descricao the descricao to set
	 */
	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}

	public Pesquisa getPesquisa() {
		return pesquisa;
	}

	public void setPesquisa(Pesquisa pesquisa) {
		this.pesquisa = pesquisa;
	}
}

e este é o código SQL gerado...

Hibernate: select nextval ('seq_id_pesq')
Hibernate: select nextval ('seq_id_opcao')
Hibernate: select nextval ('seq_id_opcao')
Hibernate: select nextval ('seq_id_opcao')
Hibernate: insert into tb_pesquisa (descricao_pesq, pergunta_pesq, id_pesq) values (?, ?, ?)
Hibernate: insert into tb_opcao (descricao_opcao, pesquisa_id_pesq, id_opcao) values (?, ?, ?)
Hibernate: insert into tb_opcao (descricao_opcao, pesquisa_id_pesq, id_opcao) values (?, ?, ?)
Hibernate: insert into tb_opcao (descricao_opcao, pesquisa_id_pesq, id_opcao) values (?, ?, ?)

o campo "pesquisa_id_pesq" não existe, na verdade ele é "id_pesq" no banco de dados, mas o hibernate não deveria criar como "id_pesq" uma vez que eu usei a anotação @JoinColumn(name="id_pesq")?

Obrigado, pessoal

4 Respostas

F

Boa tarde, pessoal.
Preciso da ajuda de vocês…

F

Pessoal me ajudem…

Guilherme_Gomes

Você deve mapear a propriedade pesquisa dentro da classe Opcao com @JoinColumn, não na classe Pesquisa. Afinal, a classe Opcao que faz referencia a tabela tb_opcao.

F

Valeu Guilherme, era isso msm.

Obrigado.

Criado 15 de outubro de 2011
Ultima resposta 17 de out. de 2011
Respostas 4
Participantes 2