Como fazer o mapeamento das tabelas de diferente Banco de Dados em JPA

1 resposta
J

Oi…
o siguiente eu tenho dois bancos um em postgres e outro em oracle, os dois trabalham bem, a conexao esta pronta deles…no persistence eu fez dois um para cada banco…
Bem minha duvida é a siguiente.
no banco de postgres eu tenho dois tabelas chamadas MUNICIPIO e outra UF o mapeamento delas é o siguiente.

/UF/

import java.io.Serializable;

import javax.persistence.Column;

import javax.persistence.Entity;

import javax.persistence.GeneratedValue;

import javax.persistence.GenerationType;

import javax.persistence.Id;

import javax.persistence.JoinColumn;

import javax.persistence.ManyToOne;

import javax.persistence.Table;

@Entity
@Table(name=“uf”)

public class UF implements Serializable{

/**
 * 
 */
private static final long serialVersionUID = 1L;
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="id_uf")
private Integer id_uf;
@Column(name="sigla_uf")
private String sigla_uf;
@Column(name="nome")
private String nome;
@Column(name="versao")
private Integer versao;
@ManyToOne
@JoinColumn(name="id_regiao")
private Regiao id_regiao;
@ManyToOne
@JoinColumn(name="id_pais")
private Pais id_pais;

public Integer getId_uf() {
	return id_uf;
}
public void setId_uf(Integer id_uf) {
	this.id_uf = id_uf;
}
public String getSigla_uf() {
	return sigla_uf;
}
public void setSigla_uf(String sigla_uf) {
	this.sigla_uf = sigla_uf;
}
public String getNome() {
	return nome;
}
public void setNome(String nome) {
	this.nome = nome;
}
public Integer getVersao() {
	return versao;
}
public void setVersao(Integer versao) {
	this.versao = versao;
}
public Regiao getId_regiao() {
	return id_regiao;
}
public void setId_regiao(Regiao id_regiao) {
	this.id_regiao = id_regiao;
}
public Pais getId_pais() {
	return id_pais;
}
public void setId_pais(Pais id_pais) {
	this.id_pais = id_pais;
}

}

/MUNICIPIO/

import java.io.Serializable;

import javax.persistence.Column;

import javax.persistence.Entity;

import javax.persistence.GeneratedValue;

import javax.persistence.GenerationType;

import javax.persistence.Id;

import javax.persistence.JoinColumn;

import javax.persistence.ManyToOne;

import javax.persistence.Table;

@Entity
@Table(name=“municipio”)

public class Municipio implements Serializable{

/**
 * 
 */
private static final long serialVersionUID = 1L;
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="id_municipio")
private Integer id_municipio;
@Column(name="nome")
private String nome;
@Column(name="versao")
private Integer versao;
@Column(name="nome_anterior")
private String nome_anterior;
@ManyToOne
@JoinColumn(name="id_uf")
private UF uf;

public Integer getId_municipio() {
	return id_municipio;
}
public void setId_municipio(Integer id_municipio) {
	this.id_municipio = id_municipio;
}
public String getNome() {
	return nome;
}
public void setNome(String nome) {
	this.nome = nome;
}
public Integer getVersao() {
	return versao;
}
public void setVersao(Integer versao) {
	this.versao = versao;
}

    public UF getUf() {
	return uf;
}
public void setUf(UF uf) {
	this.uf = uf;
}

}

NO BANCO DE ORACLE tem una tabela chamada Instituicao que tem as colunas chamadas idMunicipio,idUF, como eu posso fazer pra que ela tenha relacao com as tabelas do banco do postgres, aqui no me mapemento essas colunas estao em integer eu tente fazer um objeto de Municipio, e UF mais
nao consegui :?
/O MAPEAMENTO DE A TABELA INSTITUICAO/
import java.io.Serializable;

import javax.persistence.Column;

import javax.persistence.Entity;

import javax.persistence.GeneratedValue;

import javax.persistence.Id;

import javax.persistence.JoinColumn;

import javax.persistence.OneToOne;

import javax.persistence.PersistenceContext;

import javax.persistence.PersistenceUnit;

import javax.persistence.SequenceGenerator;

import javax.persistence.Table;

@Entity
@Table(name=“INSTITUICAO”)

public class Instituicao implements Serializable{

/**

*

*/

private static final long serialVersionUID = 1L;

@Id

@GeneratedValue(generator=seq_instituicao)

@SequenceGenerator(name=seq_instituicao,sequenceName=SEQ_INSTITUICAO, allocationSize=1)

@Column(name=id_instituicao)

private Integer id_instituicao;

@Column(name=nome)

private String nome;

@Column(name=cnpj)

private String cnpj;

@Column(name=email)

private String email;

@Column(name=telefone)

private String telefone;

@Column(name=proponente)

private boolean proponente;

@Column(name=executora)

private boolean executora;

@Column(name=endereco)

private String endereco;

@Column(name=bairro)

private String bairro;

@Column(name=id_uf)

private Integer idUf;

@Column(name=id_municipio)

private Integer IdMunicipio;
public Integer getId_instituicao() {
	return id_instituicao;
}
public void setId_instituicao(Integer id_instituicao) {
	this.id_instituicao = id_instituicao;
}
public String getNome() {
	return nome;
}
public void setNome(String nome) {
	this.nome = nome;
}
public String getCnpj() {
	return cnpj;
}
public void setCnpj(String cnpj) {
	this.cnpj = cnpj;
}
public String getEmail() {
	return email;
}
public void setEmail(String email) {
	this.email = email;
}
public String getTelefone() {
	return telefone;
}
public void setTelefone(String telefone) {
	this.telefone = telefone;
}
public boolean isProponente() {
	return proponente;
}
public void setProponente(boolean proponente) {
	this.proponente = proponente;
}
public boolean isExecutora() {
	return executora;
}
public void setExecutora(boolean executora) {
	this.executora = executora;
}
public String getEndereco() {
	return endereco;
}
public void setEndereco(String endereco) {
	this.endereco = endereco;
}
public String getBairro() {
	return bairro;
}
public void setBairro(String bairro) {
	this.bairro = bairro;
}
public Integer getIdUf() {
	return idUf;
}
public void setIdUf(Integer idUf) {
	this.idUf = idUf;
}
public Integer getIdMunicipio() {
	return IdMunicipio;
}
public void setIdMunicipio(Integer idMunicipio) {
	IdMunicipio = idMunicipio;
}

}

Obrigada pela Ajuda…

1 Resposta

filipenf

Este tipo de coisa costuma ser problemática. Não sei se dá pra fazer isso via JPA ou Hibernate, mas uma solução que talvez facilite a sua vida é utilizar o Heterogeneous Services do Oracle. Você faz uma configuração no banco de dados Oracle onde ele acesse as tabelas do Postgres. Eu já usei isso em 2 ocasiões e funciona bem. Não cheguei a usar com Hibernate mas acho que vai numa boa.
A diferença é que você vai ter conexão apenas com o Oracle, e os nomes das tabelas do postgres ficarão algo como: “MUNICIPIO@POSTGRES” sendo que este nome POSTGRES você é quem vai definir quando criar o database link.

A configuração do HS envolve vários passos, dá uma pesquisada sobre isso na internet, hoje em dia já tem bastante material sobre isso.

Criado 22 de junho de 2009
Ultima resposta 22 de jun. de 2009
Respostas 1
Participantes 2