[RESOLVIDO]Utilizar um mesmo entity para recuperar dados de datasources distintos

Ola,
Quero saber se tem como fazer o seguinte:

Tenho uma classe de entidade Setor(id, nome). Eu quero que atraves de configuracao eu recupere a informacao de bancos diferentes e com parametros diferentes. Por exemplo:

No banco A a tabela se chama setor(id,nome) mas, no banco B ela se chama Categoria(categoriaID, descricao). Vi varios topicos a respeito de configurar mais de um database, funciona. Porem em todos os casos que vi as tabelas e parametros eram os mesmos apesar dos bancos serem diferentes.

Tem como mapear dessa forma usando JPA? Um objeto com dois bancos de tabelas e parametros diferentes?

Minha ideia seria uma implementacao dessa forma

@Entity
public class Categoria {
    @id
    private Integer id;
    private String nome;
    ...
}


public interface CategoriaDao {
    public Categoria listar();
    ...
}


@Named(value="categoriaDaoBancoA")
public class CategoriaDaoImplBancoA implements CategoriaDao {

    public Categoria listar() {
           return em.getResultList();
    }
    ...
}


@Named(value="categoriaDaoBancoB")
public class CategoriaDaoImplBancoB implements CategoriaDao{
    
    public Categoria listar() {
           return em.getResultList();
    }
    ...
}


public class CategoriaController {
    
    @Resource(name="categoriaBancoXX")
    private CategoriaDao catDao;
    ...
}

Você terá que mapear no persistence.xml e orm.xml esses dados distintos. Diferença de colunas e tudo mais.

Para cada banco você enviaria o xml devido.

Por favor, não marque tópicos com o obvio, como [Dúvida] ou [Ajuda].

[quote=Hebert Coelho]Você terá que mapear no persistence.xml e orm.xml esses dados distintos. Diferença de colunas e tudo mais.

Para cada banco você enviaria o xml devido.[/quote]

Nesse caso vai ser como o hibernate antigamente, para cada objeto um xml mapeando a tabela, so que tudo fica no orm.xml. ORM-XML-BancoA e ORM-XML_BancoB, …

Blz valeu, no sample do spring tem um exemplo, o petclinic, usando o ORM. Valeu vou dar uma olhada.

[quote=thimor][quote=Hebert Coelho]Você terá que mapear no persistence.xml e orm.xml esses dados distintos. Diferença de colunas e tudo mais.

Para cada banco você enviaria o xml devido.[/quote]

Nesse caso vai ser como o hibernate antigamente, para cada objeto um xml mapeando a tabela, so que tudo fica no orm.xml. ORM-XML-BancoA e ORM-XML_BancoB, …

Blz valeu, no sample do spring tem um exemplo, o petclinic, usando o ORM. Valeu vou dar uma olhada.

[/quote]Issoae! =D

Usando a dica do Hebert Coelho, ja encontrei o caminho aqui nos samples do spring. Projeto petclinic para quem precisar e quiser da uma olhada. Vou alterar o persistence.xml para ficar dessa forma:

		xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
		xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
		version="1.0">

	<persistence-unit name="PetClinic" transaction-type="RESOURCE_LOCAL">
		<mapping-file>META-INF/[b]orm.xml[/b]</mapping-file>
		<exclude-unlisted-classes>true</exclude-unlisted-classes>
	</persistence-unit>

	<persistence-unit name="clinicavet" transaction-type="RESOURCE_LOCAL">
		<mapping-file>META-INF/[b]orm-clinicavet.xml[/b]</mapping-file>
		<exclude-unlisted-classes>true</exclude-unlisted-classes>
	</persistence-unit>

</persistence>

e no orm.xml vai ficar o mapeamento do objeto com a tabela, dessa forma:

//orm.xml
<mapped-superclass class="Person">
	<attributes>
		<basic name="firstName">
			<column name="FIRST_NAME"/>
		</basic>
		<basic name="lastName">
			<column name="LAST_NAME"/>
		</basic>
	</attributes>
</mapped-superclass>

//orm-clinicavet.xml
<mapped-superclass class="Cliente">
	<attributes>
		<basic name="nome">
			<column name="NOME"/>
		</basic>
		<basic name="sobreNome">
			<column name="SOBRENOME"/>
		</basic>
	</attributes>
</mapped-superclass>