[Resolvido]Ajuda para Criar Este Relacionamento

5 respostas
R

Ola pessoal, estou tentando criar um relacionamento aqui, mais nao sei se esta certo, por favor pesso ajuda de voces pra me dizer.
E uma tabela de enderecos, onde tenho uma tabela de bairros e uma tabela de cidades.
Eis a Tabela de Bairros :

@Entity
@Table( name= "end_bairro" )
@SequenceGenerator( name = "nome_seq", sequenceName = "bai_codigo", allocationSize = 1, initialValue = 1 )

public class EntEndBairro implements java.io.Serializable{
    
    private static final long serialVersionUID = 1L;
    
    // Definindo as Colunas do Banco de Dados.
    @Id
    @GeneratedValue(generator="nome_seq")
    private Integer     bai_codigo;
    
    @Column(name = "bai_descricao", length = 50)
    private String      bai_descricao;
    
    
    
    public EntEndBairro(){
        
    }
    
    
    
    // Getters And Setters.

A Minha Entidade de Cidades :

@Entity
@Table( name= "end_cidade" )
@SequenceGenerator( name = "nome_seq", sequenceName = "cid_codigo", allocationSize = 1, initialValue = 1 )

public class EntEndCidade implements java.io.Serializable{
 
    private static final long serialVersionUID = 1L;
    
    // Definindo as Colunas do Banco de Dados.
    @Id
    @GeneratedValue(generator="nome_seq")
    private Integer     cid_codigo;
    
    @Column(name = "cid_descricao", length = 50)
    private String      cid_descricao;
    
    
    
    public EntEndCidade(){
        
    }
    
    
    
    // Getters And Setters.

E Finalmente a Minha Entidade de Enderecos :

@Entity
@Table( name= "end_cidade" )
@SequenceGenerator( name = "nome_seq", sequenceName = "end_codigo", allocationSize = 1, initialValue = 1 )

public class EntEndEndereco implements java.io.Serializable {
    
    private static final long serialVersionUID = 1L;
    
    // Definindo as Colunas do Banco de Dados.
    @Id
    @GeneratedValue(generator="nome_seq")
    private Integer         end_codigo;
    
    
    @Column(name = "end_descricao", length = 100)
    private String          end_descricao;
    
    
    // Relacionamento com a Tabela de Bairros.
    @OneToOne
    @JoinColumn( name = "end_cod_bairro" )
    private EntEndBairro    end_cod_bairro;
    
    
    // Relacionamento com a Tabela de Cidades.
    @OneToOne
    @JoinColumn( name = "end_cod_cidade")
    private EntEndCidade    end_cod_cidade;
    
    
    @Column(name = "end_estado", length = 2)
    private String          end_estado;
    
    @Column(name = "end_zipcode", length = 12)
    private String          end_zipcode;
    
    
    public EntEndEndereco(){
        
    }
    
    
    
    // Getters And Setters.

Esta dando erro ao Gerar a Tabela de Enderecos.

Esta Gerando uma Tabela de Cidades Assim :

CREATE TABLE end_cidade
(
  end_codigo integer NOT NULL,
  end_descricao character varying(100),
  end_estado character varying(2),
  end_zipcode character varying(12),
  cid_codigo integer NOT NULL,
  cid_descricao character varying(50),
  end_cod_bairro integer,
  end_cod_cidade integer,
  CONSTRAINT end_cidade_pkey PRIMARY KEY (cid_codigo ),
  CONSTRAINT fkfaad2f08a28ee6ca FOREIGN KEY (end_cod_bairro)
      REFERENCES end_bairro (bai_codigo) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION,
  CONSTRAINT fkfaad2f08a6d50148 FOREIGN KEY (end_cod_cidade)
      REFERENCES end_cidade (cid_codigo) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION

Agradeco a Ajuda de Todos um forte abraco.

5 Respostas

R

Achei o Erro, na hora de criar a Entidade de Enderecos, estava errando no

@Table(name="")

aqui colocava o nome Errado da tabela.

Mais Ainda tenho uma duvida, esta e a maneira correta de fazer este relacionamento, digo, OneToOne ?

paulo.furtado

Olha amigo, no meu entender você esta pensando estruturado.
Você esta dizendo que

UM endereco para UM bairro.
UM endereco para UMA cidade.

Na verdade seria

MUITOS enderecos para UM bairro
MUITOS enderecos para UMA cidade

O relacionamento seria assim:

Classe Bairro:

@Entity
@Table(name="bairro")

public class Bairro 
{
    @Id
    @GeneratedValue(strategy= GenerationType.AUTO)
    private int id;
    
    @Column
    private String descricao;
    
    @OneToMany(mappedBy="bairro")
    @Cascade(CascadeType.ALL)
    private Collection<Endereco> endereco ;
}

Classe Cidade

@Entity
@Table(name="cidade")
public class Cidade implements Serializable 
{
    @Id
    @GeneratedValue(strategy= GenerationType.AUTO)
    private int id;
    
    @Column
    private String nome;
    
    @OneToMany(mappedBy="cidade")
    @Cascade(CascadeType.ALL)
    private Collection<Endereco> endereco ;
}

Classe Endereco

@Entity
@Table(name="Endereco")
public class Endereco implements Serializable 
{
    @Id
    @GeneratedValue(strategy= GenerationType.AUTO)
    private int id;
    
    private String descricao;
    
    @ManyToOne()
    @JoinColumn(name="bairro")
    @Cascade(CascadeType.ALL)
    private Bairro bairro;
    
    @ManyToOne()
    @JoinColumn(name="cidade")
    @Cascade(CascadeType.ALL)
    private Cidade cidade;
    
    
    @Column(name = "estado", length = 2)  
    private String estado;  
      
    @Column(name = "zipcode", length = 12)  
    private String zipcode; 
}

A class Endereco terá duas chaves estrangeiras.

Uma vinda de Cidade
Outra vinda de Bairro

Crie a classe Gerador_de_Tabelas.java

import org.hibernate.tool.hbm2ddl.SchemaExport;
import org.hibernate.cfg.AnnotationConfiguration;

public class Gerador_de_Tabelas 
{
    public static void main(String [] args)
    {
        AnnotationConfiguration cfg = new AnnotationConfiguration();
               
        cfg.addAnnotatedClass(Bairro.class); // classe mapeada com annotation
        cfg.addAnnotatedClass(Cidades.class); // classe mapeada com annotation
        cfg.addAnnotatedClass(Enderecos.class); // classe mapeada com annotation
        
        SchemaExport se = new SchemaExport(cfg); // cria o schema do banco
        se.create(true, true);  
    }
}

Rode a classe Gerador_de_Tabelas.java e veja seu banco.

Se falei algo errado por favor me corrijam.
Espero ter ajudado.

Paulo Furtado

R

Realmente Funcionou testei aqui e funcionou perfeitamente, agradeco a grande ajuda amigos um forte abraco.

paulo.furtado

Por nada.
Só mais uma dica.
Se funfou beleza, coloque [RESOLVIDO] no post.
Precisando estamos aqui.
Vlw

R

up

Criado 15 de janeiro de 2012
Ultima resposta 20 de jan. de 2012
Respostas 5
Participantes 2