@JoinColumn + @OneToMany + Set[RESOLVIDO]

3 respostas
danielbussade

Olá como faço para fazer um @JoinColumn de classes com relacionamento @OneToMany ex:

Classe Palestrante

@Entity
@DiscriminatorValue(value="PALESTRANTE")
public class Palestrante extends Pessoa {
 
	@Column(name="CPF", length=12, nullable=false, unique=true)
	private String cpf;
	 
	@Column(name="FORMACAO", length=150)
	private String formacao;
	
	@Column(name="ESPECIALIDADE", length=150) 
	private String especialidade;
	
	@Column(name="OBS", length=200) 
	private String obs;
	
	@JoinColumn(name="FK_PALESTRA", referencedColumnName="ID_PALESTRA")
        @OneToMany
        private Set<Palestra> palestra;  //o ERRO ESTA AQUI
	
	public Palestrante() {
	}
	

	public Palestrante(String nome,
					   String cpf, 
					   String formacao, 
					   String especialidade, 
					   String obs, 
					   Set<Palestra> palestra) {
		super(nome);
		this.cpf = cpf;
		this.formacao = formacao;
		this.especialidade = especialidade;
		this.obs = obs;
		this.palestra = palestra;
	}
}

Classe Pessoa:

@Entity(name="PESSOA")
public abstract class Pessoa {
 
	@Id
	@GeneratedValue
	@Column(name="ID_PESSOA")
	private Long id;
	 
	@Column(name="NOME_PESSOA", length=60, nullable=false, unique=true)
	private String nome;
	 	
	public Pessoa() {
		
	}

	public Pessoa(String nome) {
		super();
		this.nome = nome;
	}
}

Classe Palestra

@Entity(name="PALESTRA")
public class Palestra {
 
	@Id
	@GeneratedValue
	@Column(name="ID_PALESTRA")
	private Long id;
}

Quando tento criar o banco ele me gera o seguinte erro:

Exception in thread "main" javax.persistence.PersistenceException: org.hibernate.MappingException: Unable to find column with logical name: ID_PALESTRA in org.hibernate.mapping.Table(PESSOA) and its related supertables and secondary tables

Alguém sabe o que pode ser??

3 Respostas

ruilima

Fala Daniel…

Pq vc não faz o seguinte esquema cria primeiro as classes de banco de dados e depois gera as classe e as paginas JSF.

pablofaria

Fala rapa…

Quando você usa um @OneToMany, você não precisa criar um @JoinColumn, o Hibernate automaticamente te gera uma tabela a parte para fazer esse tipo de relacionamento.

Se quiser especificar isso na classe Palestra crie uma Fk usando @JoinColumn e @ManyToOne

danielbussade

pablofaria:
Fala rapa…

Quando você usa um @OneToMany, você não precisa criar um @JoinColumn, o Hibernate automaticamente te gera uma tabela a parte para fazer esse tipo de relacionamento.

Se quiser especificar isso na classe Palestra crie uma Fk usando @JoinColumn e @ManyToOne

Fala pablo, é verdade é que não queria que fosse gerada uma tabela a parte, descobri como fazer com um relacionamento bidirecional e no lado @OneToMany coloco mappedBy, ai funciona.

Valeu

Criado 12 de abril de 2008
Ultima resposta 12 de abr. de 2008
Respostas 3
Participantes 3