Problemas com o hibernate

estou tendo problemas com o hibernate, no caso eu tenho 3 tabelas no meu banco de dados que sao: cliente, funcionario e endereco.

o meu problema eh q tanto a tabela funcionario como cliente referencia endereco, o problema acontece de quando eu vou recuperar algum desses objetos ele nao recupera o endereco corretamente, apenas pela ID do cliente se for 3 ele recupera o endereco com id 3, mas nem sempre vai ser igual, ja que tem funcionario pode ter adicionado antes, entenderam? como faco pra corrigir isso?

E como está o seu mapeamento?

Faça uma modelagem decente. Sugiro uma tabela de relacionamento, já que pelo visto pode ser N x M, certo?

Abraço,

Armando

o relacionamento esta OneToOne, na tabela cliente como funcionario tem um campo Endereco_ID, do qual so fica null mesmo eu adicionando um objeto de endereco atravez do metodo set tanto em cliente como em endereco, tb tem o campo ID que eh o campo principal, se o id do objeto cliente q eu kiser deletar for 5, ele deleta o endereco com o id 5 tb, mas nem sempre vai ser igual, e ele deleta o errado.

alguma ajuda?

alguem ajuda pois estou ficando doido ja aq tentando d td e nao conseguindo.

Coloque o código dos mapeamentos pra ficar mais claro!

package entity;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import javax.persistence.JoinColumn;

@Entity
@Table(name = “colaborador”)
public class Colaborador implements java.io.Serializable {

private int ID;	 
private String nome;	 
private String dataEntradaIES;	 
private String IES;	 
private int telefone;
private int celular;	 
private String email;	 
private String pagPessoal;	 
private String areaInteresse;	 
private String areaAtuacao;	 
private String curriculo;	 
private String funcao;	 
private String projetos;	
private Endereco endereco; 	//referencia para outra tabela 
 
public Colaborador() {
	
}

@Id
@Column(name = "ID")
public int getID() {
	return this.ID;
}

public void setID(int ID) {
	this.ID = ID;
}

@Column(name = "nome")
public String getNome() {
	return this.nome;
}

public void setNome(String nome) {
	this.nome = nome;
}
	 
@Column(name = "dataEntradaIES")
public String getDataEntradaIES() {
	return this.dataEntradaIES;
}

public void setDataEntradaIES(String dataEntradaIES) {
	this.dataEntradaIES = dataEntradaIES;
}

@Column(name = "IES")
public String getIES() {
	return IES;
}

public void setIES(String IES) {
	this.IES = IES;
}
 
@Column(name = "telefone")
public int getTelefone() {
	return this.telefone;
}

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

@Column(name = "celular")
public int getCelular() {
	return this.celular;
}

public void setCelular(int celular) {
	this.celular = celular;
}

@Column(name = "email")
public String getEmail() {
	return this.email;
}

public void setEmail(String email) {
	this.email = email;
}

@Column(name = "pagPessoal")
public String getPagPessoal() {
	return this.pagPessoal;
}

public void setPagPessoal(String pagPessoal) {
	this.pagPessoal = pagPessoal;
}
 
@Column(name = "areaInteresse")
public String getAreaInteresse() {
	return this.areaInteresse;
}

public void setAreaInteresse(String areaInteresse) {
	this.areaInteresse = areaInteresse;
}

@Column(name = "areaAtuacao")
public String getAreaAtuacao() {
	return this.areaAtuacao;
}
 
public void setAreaAtuacao(String areaAtuacao) {
	this.areaAtuacao = areaAtuacao;
}
 
@Column(name = "curriculo")
public String getCurriculo() {
	return this.curriculo;
}

public void setCurriculo(String curriculo) {
	this.curriculo = curriculo;
}

@Column(name = "funcao")
public String getFuncao() {
	return this.funcao;
}
 
public void setFuncao(String funcao) {
	this.funcao = funcao;
}
 
@Column(name = "projetos")
public String getProjetos() {
	return this.projetos;
}

public void setProjetos(String projetos) {
	this.projetos = projetos;
}
 

@OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@JoinColumn(name = "Endereco_ID")
public Endereco getEndereco() {
	return this.endereco;
}

public void setEndereco(Endereco endereco) {
	this.endereco = endereco;
}	 

}

package entity;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = “endereco”)
public class Endereco implements java.io.Serializable {

private int ID;
private String rua;	 
private int numero;	 
private String complemento;	 
private String bairro;	 
private String cidade;	 
private String estado;

public Endereco() {
	
}

@Id
@Column(name = "ID")
public int getID() {
	return this.ID;
}

public void setID(int ID) {
	this.ID = ID;
}

@Column(name = "rua")
public String getRua() {
	return this.rua;
}
 
public void setRua(String rua) {
	this.rua = rua;
}

@Column(name = "numero")
public int getNumero() {
	return this.numero;
}
 
public void setNumero(int numero) {
	this.numero = numero;
}
 
@Column(name = "complemento")
public String getComplemento() {
	return complemento;
}

public void setComplemento(String complemento) {
	this.complemento = complemento;
}

@Column(name = "bairro")
public String getBairro() {
	return bairro;
}
 
public void setBairro(String bairro) {
	this.bairro = bairro;
}
 
@Column(name = "cidade")
public String getCidade() {
	return cidade;
}

public void setCidade(String cidade) {
	this.cidade = cidade;
}

@Column(name = "estado")
public String getEstado() {
	return this.estado;
}
 
public void setEstado(String estado) {
	this.estado = estado;
}	 

}

s ai esta a parte da funcao pra deletar da classe ColaboradorHibernateDAO

public void remover(Colaborador colaborador) {
session = ConnectDB.getInstance();
Transaction tx = null;

	try {
		tx = session.beginTransaction();
		session.delete(colaborador);
		tx.commit();
	}
	
	catch(HibernateException e) {
		e.printStackTrace();
	}
	finally {
		session.close();
	}
}

bem, aquele erro nao existe mais nesse codigo q postei, pois nao posso compartilhar as mesmas fk se nao acaba acontecendo o problema ja mencionado, o erro q acontece agora, eh q o campo Endereco_ID fica sempre 0, oque era pra ficar com o id do objeto endereco, oq acontece eh q nao consigo mais deletar pois ele nao axa o objeto relacionado com o id 0 q nao existe, como faco pra consertar isso?

estou enviando o codigo mysql tb caso ajude, mas axo q o erro nao esta aq

CREATE TABLE endereco (
ID INTEGER NOT NULL,
rua VARCHAR(100) NULL,
numero INTEGER NULL,
complemento VARCHAR(20) NULL,
bairro VARCHAR(30) NULL,
cidade VARCHAR(30) NULL,
estado CHAR(2) NULL,
PRIMARY KEY(ID)
);

CREATE TABLE colaborador (
ID INTEGER NOT NULL,
Endereco_ID INTEGER NOT NULL,
nome VARCHAR(45) NOT NULL,
dataEntradaIES VARCHAR(10) NOT NULL,
IES VARCHAR(45) NOT NULL,
telefone INTEGER NULL,
celular INTEGER NULL,
email VARCHAR(100) NULL,
pagPessoal VARCHAR(200) NULL,
areaInteresse VARCHAR(255) NOT NULL,
areaAtuacao VARCHAR(255) NOT NULL,
curriculo VARCHAR(255) NULL,
funcao VARCHAR(45) NOT NULL,
trabalhosRealizados TEXT NULL,
projetos VARCHAR(200) NULL,
PRIMARY KEY(ID),
FOREIGN KEY(endereco_ID)
REFERENCES endereco(ID)
ON DELETE NO ACTION
ON UPDATE NO ACTION
);

minha duvida eh a seguinte, qd eu adiciono um novo cliente ou funcionario(colaborador) ele sempre adiciona no campo endereco_ID o valor 0,era pra ficar o valor ID d endereco, como faco isso?

ninguem se habilita? to precisando com urgencia.

Urgencia eh com o 190 ou 192.

aff cara, se nao ksier ajudar nao atrapalha, to ate agora tentando aq, lendo as referencias dos annotations do hibernate q eu peguei e nao to conseguindo, to lendo hibernate in action, me ajudaram mt, mas so falta isos pra mim e nao to conseguindo.

olha só, crie o relacionamento tanto do pai para o filho quanto o inverso, e no filho na insersão vc coloca o proprio pai dentro dele que vai funcionar, aqui fiz assim e esta rodando.

mt obg pela ajuda, tentei fazer oq vc me disse mas nao estou conseguindo, pode me dar uma ajuda?

so pra dar um up no topico pq estou precisando mt

ninguem sabe qual eh o problema? nao to conseguindo aq.