Como atualizar chave estrangeira

8 respostas
E

Tenho 2 tabelas. ALUNO e NOTA. Abaixo os campos

ALUNO
id
nome
turma

NOTA
id
id_aluno
nota

quando o usuário digitar no formulário os dados do aluno e a nota, a chave entrangeira deve ser incluída manual ou automaticamente ?

8 Respostas

Raff

geralmente é automáticamente !

Raff

não vai ser automaticamente igual o mySQl que gera o id_aluno com o auto_increment, vc tem que colocar manualmente a FK !

E

putz, isso é andar pra traz…Estou fazendo um exemplo com TopLink com annotations.
Além de cada tabela que insiro eu tenho que depois setar as chaves estrangeiras para as tabelas que as tem ? Muito estranho isso…

E

Autores:

package meupacote;

import java.io.Serializable;
import java.util.Collection;

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.OneToMany;
import javax.persistence.Table;

@Entity
@Table(name="autores")
public class Autores implements Serializable {
	
	private static final long serialVersionUID = 1L;
	@Id
	@Column(name="autor_id")
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	private Integer autorId;
	@Column(name="nome")
	private String nome;
	@OneToMany(cascade=CascadeType.ALL, mappedBy="autores") --> isso que eu  sei...Mas, 
	[b]private Collection<Publicacao>publicacao;[/b] ---------> Para que isso aqui ?
	
	public Integer getAutorId() {
		return autorId;
	}
	public void setAutorId(Integer autorId) {
		this.autorId = autorId;
	}
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}

	public Collection<Publicacao> getPublicacao() {
		return publicacao;
	}
	public void setPublicacao(Collection<Publicacao> publicacao) {
		this.publicacao = publicacao;
	}
}

Publicacao

package meupacote;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;

@Entity
@Table(name="publicacao")

public class Publicacao implements Serializable {

	private static final long serialVersionUID = 1L;
	
	@Id
	@Column(name="publicacao_id", nullable=false)
	private int publicacaoId;
	
	@ManyToOne
	@JoinColumn(name="livros_isbn", nullable=false)
	private Livros livros;
	
	@ManyToOne
	@JoinColumn(name="editora_id", nullable=false)
	private Editora editora;
	
	@ManyToOne
	@JoinColumn(name="autores_autor_id", nullable=false)
	private Autores autores;

	public int getPublicacaoId() {
		return publicacaoId;
	}

	public void setPublicacaoId(int publicacaoId) {
		this.publicacaoId = publicacaoId;
	}

	public Livros getLivros() {
		return livros;
	}

	public void setLivros(Livros livros) {
		this.livros = livros;
	}

	public Editora getEditora() {
		return editora;
	}

	public void setEditora(Editora editora) {
		this.editora = editora;
	}

	public Autores getAutores() {
		return autores;
	}

	public void setAutores(Autores autores) {
		this.autores = autores;
	}
}

Galera me ajuda entender este exemplo acima(O autor pode está em várias publicações).

Raff

sim
pensa no modelo entidade relacional MER, um autor tem varias publicações !

E

tudo bem, essa não é minha dúvida…Eu não estou conseguindo compreender como faço essa inclusão no banco de dados. Até hoje brinquei de incluir dados em tabelas independentes.

Estou utilizando jsf + toplink e mysql…

olha meu jsf :

<h:form>
		<fieldset>
			<h:outputLabel value="Isbn"/>
			<h:inputText value="#{livrariaFormBean.livro.isbn}"/>
		</fieldset>		
		<fieldset>		
			<h:outputLabel value="Título"/>
			<h:inputText value="#{livrariaFormBean.livro.titulo}"/>
		</fieldset>		
		<fieldset>
			<h:outputLabel value="Autor"/>
			<h:inputText value="#{livrariaFormBean.autor.nome}"/>
		</fieldset>		
		<fieldset>
			<h:outputLabel value="Editora"/>
			<h:inputText value="#{livrariaFormBean.editora.nomeEditora}"/>
		</fieldset>
		
		<fieldset>
			<h:commandButton action="#{livrariaFormBean.create}" value="incluir"/>
		</fieldset>		
	</h:form>

Neste arquivo estou incluindo dados em tabelas independentes, mas e a tabela publicação onde contém as chaves estrangeiras…No código da classe Publicacao tem um monte de anotação , referencia, o escambal a 4 para eu ter que incluir os dados como se ela fosse uma tabela independente…

Ajudem-me…

Raff

vamos pensar em um exemplo aqui diferente.
vamos ter a tabela professor e a tabela cursos, um professor ministra vários cursos sendo que um curso somente pode ser ministrado por um unico professor. Isto da gera um relacionamente 1 to many. Para incluir o professor na tabela vc vai incluir normalmente igual quando vc brincava para incluir em uma inica tabela (igual vc disse), só que quando vc incluir um curso vc vai precisar decidir qual professor vc deseja para ministrar esse curso. Tendo o professor selecionado vc vai poder gravar um curso normalmente e colocando o id_professor como FK (foreing key). Bom espero ter ajudado com esse exemplo. Não compriendi muito bem sua dúvida !

E

blz até aí tudo bem…Essa situação de selecionar qual professor para incluir os cursos, pensei que no mapeamento em jpa fazia automaticamente, sem ter que eu setar manualmente…

Criado 1 de agosto de 2008
Ultima resposta 1 de ago. de 2008
Respostas 8
Participantes 2