Hibernate persistencia duas tabelas

3 respostas
G

Prezados, eu tenho um sistema onde tenho uma classe Embarcacao e Proprietario, onde as duas se relacionam, de forme que na tabela Embarcacao costa uma fk(idproprietario)

Embarcacao POJO

package br.ucb.pojo;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.DiscriminatorColumn;
import javax.persistence.DiscriminatorType;
import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;
import org.hibernate.annotations.ForeignKey;
import org.hibernate.annotations.IndexColumn;

@Entity
@Table(name = "embarcacao")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "tipoEmbarcacao", discriminatorType = DiscriminatorType.INTEGER)
@DiscriminatorValue("0")
public class Embarcacao implements Serializable {
	private static final long serialVersionUID = 1L;

	@IndexColumn(name = "idEmbarcacao_UNIQUE")
	@Id
	@Column(name = "idEmbarcacao", nullable = false)
	private Integer idEmbarcacao;

	@Column(name = "nomeEmbarcacao", nullable = false)
	private String nomeEmbarcacao;

	@Column(name = "inscricaoEmbarcacao", nullable = false)
	private String inscricaoEmbarcacao;

	@IndexColumn(name = "FK_PROPRIETARIO")
	@ForeignKey(name = "FK_PROPRIETARIO")
	@ManyToOne
	@JoinColumn(name = "proprietario_idProprietario")
	@Fetch(FetchMode.JOIN)
	public Proprietario proprietario;

	//public Embarcacao() {
	//this.nomeEmbarcacao = null;
	//this.inscricaoEmbarcacao = null;
	//this.idEmbarcacao = null;
	//this.proprietario = new Proprietario();
	//}

	@Override
	public String toString() {
		return "Embarcacao [idEmbarcacao=" + idEmbarcacao + ", nomeEmbarcacao="
				+ nomeEmbarcacao + ", inscricacaoEmbarcacao="
				+ inscricaoEmbarcacao + ", proprietario=" + proprietario + "]";
	}

	public Integer getIdEmbarcacao() {
		return idEmbarcacao;
	}

	public void setIdEmbarcacao(Integer idEmbarcacao) {
		this.idEmbarcacao = idEmbarcacao;
	}

	public String getNomeEmbarcacao() {
		return nomeEmbarcacao;
	}

	public void setNomeEmbarcacao(String nomeEmbarcacao) {
		this.nomeEmbarcacao = nomeEmbarcacao;
	}

	public String getInscricaoEmbarcacao() {
		return inscricaoEmbarcacao;
	}

	public void setInscricaoEmbarcacao(String inscricaoEmbarcacao) {
		this.inscricaoEmbarcacao = inscricaoEmbarcacao;
	}

	public Proprietario getProprietario() {
		return proprietario;
	}

	public void setProprietario(Proprietario proprietario) {
		this.proprietario = proprietario;
	}

}

Proprietario POJO

package br.ucb.pojo;

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.Table;

import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;
import org.hibernate.annotations.IndexColumn;

@Entity
@Table(name = "proprietario")
public class Proprietario implements Serializable {
	private static final long serialVersionUID = 1L;

	@IndexColumn(name = "idProprietario_UNIQUE")
	@Id
	@Column(name = "idProprietario", nullable = false)
	private Integer idProprietario;

	@Column(name = "proprietarioNome", nullable = false)
	private String proprietarioNome;

	@Column(name = "numeroArrais", nullable = false)
	private String numeroArrais;

	@Column(name = "cpf", nullable = false)
	private String cpf;

	@Column(name = "telefone", nullable = false)
	private String telefone;

	
	
	public Proprietario() {
		this.idProprietario = null;
		this.proprietarioNome = null;
		this.numeroArrais = null;
		this.cpf = null;
		this.telefone = null;
		
	}

	@Override
	public String toString() {
		return "Proprietario [idProprietario=" + idProprietario + ", proprietarioNome=" + proprietarioNome
				+ ", numeroArrais=" + numeroArrais + ", cpf=" + cpf
				+ ", telefone=" + telefone + "]";
	}

	public Integer getidProprietario() {
		return idProprietario;
	}

	public void setidProprietario(Integer idProprietario) {
		this.idProprietario = idProprietario;
	}

	public String getproprietarioNome() {
		return proprietarioNome;
	}

	public void setproprietarioNome(String proprietarioNome) {
		this.proprietarioNome = proprietarioNome;
	}

	public String getArrais() {
		return numeroArrais;
	}

	public void setArrais(String arrais) {
		this.numeroArrais = arrais;
	}

	public String getCpf() {
		return cpf;
	}

	public void setCpf(String cpf) {
		this.cpf = cpf;
	}

	public String getTelefone() {
		return telefone;
	}

	public void setTelefone(String telefone) {
		this.telefone = telefone;
	}

}

Classe que faz o insert na tabela proprietario

package br.ucb.aplicacao;

import br.ucb.hibernate.ProprietarioHibernate;
import br.ucb.pojo.Proprietario;

public class ProprietarioController {

	public static void inclusaoDeProprietario(Proprietario proprietario1)
			throws Exception {
		ProprietarioHibernate proHBR = new ProprietarioHibernate();
		if (proHBR.inclui(proprietario1))
			System.out.println("Inserido: " + proprietario1);
	}

	public static void exclusaoDeProprietario(Proprietario registro)
			throws Exception {
		ProprietarioHibernate proHBR = new ProprietarioHibernate();
		if (proHBR.exclui(registro))
			System.out.println("Excluído: " + registro);
	}

	public static void alteracaoDeProprietario(Proprietario registro)
			throws Exception {
		ProprietarioHibernate proHBR = new ProprietarioHibernate();
		if (proHBR.altera(registro))
			System.out.println("Alterado: " + registro);
	}

	public static Proprietario consultaDeProprietario(Proprietario registro)
			throws Exception {
		ProprietarioHibernate proHBR = new ProprietarioHibernate();
		registro = proHBR.consulta(registro);
		if (registro.getidProprietario() > 0)
			System.out.println("Consulta: " + registro);
		return registro;
	}

	public static void listagemDeProprietario() throws Exception {
		ProprietarioHibernate proHBR = new ProprietarioHibernate();
		System.out.println("*****Listando Tudo*******");
		for (Proprietario p : proHBR.listaTudo())
			System.out.println(p);
	}

	public static void listagemDeProprietario(int inicio, int fim)
			throws Exception {
		ProprietarioHibernate proHBR = new ProprietarioHibernate();
		System.out.println("*****Listando Subconjunto Paginado*******");
		for (Proprietario p : proHBR.pagina(inicio, fim))
			System.out.println(p);
	}

	public static void main(String[] args) throws Exception {

		Proprietario proprietario1 = new Proprietario();

		proprietario1.setidProprietario(2);
		proprietario1.setproprietarioNome("Paulo");
		proprietario1.setArrais("1256897");
		proprietario1.setCpf("[telefone removido]");
		proprietario1.setTelefone("061-39648611");
		
		
	


		inclusaoDeProprietario(proprietario1);
		//alteracaoDeProprietario(registro);
		//consultaDeProprietario(registro);
		//exclusaoDeProprietario(registro);
		//listagemDeProprietario();
		//listagemDeProprietario(0, 10);

	}
}

Meu banco

CREATE TABLE embarcacao (
  idEmbarcacao INTEGER UNSIGNED NOT NULL,
  proprietario_idProprietario INTEGER UNSIGNED NOT NULL,
  nomeEmbarcacao TEXT NOT NULL,
  inscricaoEmbarcacao TEXT NOT NULL,
  PRIMARY KEY(idEmbarcacao),
  INDEX FK_PROPRIETARIO(proprietario_idProprietario)
);

CREATE TABLE proprietario (
  idProprietario INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  proprietarioNome TEXT NOT NULL,
  numeroArrais TEXT NOT NULL,
  cpf CHAR(11) NOT NULL,
  telefone CHAR(15) NOT NULL,
  PRIMARY KEY(idProprietario)
);

Estou conseguindo inserir o proprietario,a minha duvida e de como fazer a persistencia na tabela embarcacao sendo necessario informar o id do proprietario, ja tentei de varias forma mais sempre da erro.

3 Respostas

d34d_d3v1l

da uma melhorada no codigo ai cara…

“Controller” com metodos estaticos que ficam criando :

ProprietarioHibernate proHBR = new ProprietarioHibernate();

mto feio isso…

bom, a sua duvida, nao entendi bem:

Embarcacao emb = new Embarcacao();

Proprietario p = new Proprietario(1); //codigo do proprietario.. isso será pego de algum lugar :P

emb.setProprietario(p);

salvar(emb);
G

Minha duvida e o seguinte:

Eu ja consegui inserir um proprietario com id(1), agora eu quero testar a persistencia na tabela embarcacao, porem para isso eu preciso veincular o id de um proprietario que no caso sera a fk, resumindo eu quero cadastrar uma embarcaçao cujo dono sera o que tem id(1), e lembrando que tenho a classse que faz o insert do proprietario e outra que faz a da embarcacao, eu preciso saber alguma forma para pergar um id de um proprietario ja inserido e inserir na embarcacao.

d34d_d3v1l

então…
é do jeito que eu falei acima :slight_smile:

Criado 26 de agosto de 2012
Ultima resposta 27 de ago. de 2012
Respostas 3
Participantes 2