I need to query a database in MySQL and get a table from there to write to a PostgreSQL database through Hibernate / JPA.
I configured persistence.xml
as follows:
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
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_2_0.xsd"
version="2.0">
<persistence-unit name="postgreSQL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<properties>
<property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver" />
<property name="javax.persistence.jdbc.url" value="jdbc:postgresql://localhost:5432/tfProjeto" />
<property name="javax.persistence.jdbc.user" value="postgres" />
<property name="javax.persistence.jdbc.password" value="admin" />
<property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect" />
<property name="hibernate.connection.CharSet" value="UTF-8" />
<property name="hibernate.connection.characterEncoding" value="UTF-8" />
<property name="hibernate.connection.useUnicode" value="true" />
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.format_sql" value="true" />
<property name="hibernate.hbm2ddl.auto" value="update" />
<property name="hibernate.c3p0.min_size" value="5" />
<property name="hibernate.c3p0.max_size" value="10" />
<property name="hibernate.c3p0.timeout" value="1800" />
<property name="hibernate.c3p0.max_statements" value="50" />
</properties>
</persistence-unit>
<persistence-unit name="mySQL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<properties>
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
<property name="javax.persistence.jdbc.url" value="jdbc:mysql:/localhost:3306/meuProjeto?zeroDateTimeBehavior=convertToNull" />
<property name="javax.persistence.jdbc.user" value="root" />
<property name="javax.persistence.jdbc.password" value="admin" />
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
<property name="hibernate.connection.CharSet" value="UTF-8" />
<property name="hibernate.connection.characterEncoding" value="UTF-8" />
<property name="hibernate.connection.useUnicode" value="true" />
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.format_sql" value="true" />
<property name="hibernate.hbm2ddl.auto" value="update" />
<property name="hibernate.c3p0.min_size" value="5" />
<property name="hibernate.c3p0.max_size" value="10" />
<property name="hibernate.c3p0.timeout" value="1800" />
<property name="hibernate.c3p0.max_statements" value="50" />
</properties>
</persistence-unit>
And my EntityFactory looks like this:
@RequestScoped
public class EntityFactory implements Serializable {
private static final long serialVersionUID = 1L;
public static EntityManagerFactory entityManagerFactory;
public static EntityManagerFactory entityManagerFactoryMySQL;
public static void initializeEntityManager() {
if ((entityManagerFactory == null) || (!entityManagerFactory.isOpen())) {
entityManagerFactory = Persistence.createEntityManagerFactory("postgreSQL");
}
}
public static void initializeEntityManagerMySql() {
if ((entityManagerFactoryMySQL == null) || (!entityManagerFactoryMySQL.isOpen())) {
entityManagerFactoryMySQL = Persistence.createEntityManagerFactory("mySQL");
}
}
}
However, when you generate the classes, Hibernate creates both tables in both banks. That is, I need to get from users
(MySQL) and write to usuarios
(PostgreSQL), but Hibernate creates the users
and usuarios
tables in MySQL and the users tables and usuarios
in PostgreSQL as well, what I want is to just create usuarios
on the basis of PostgreSQL only.
Any solution?