2
I need to consult a database in Mysql and take a table from there to write to a database in Postgresql by Hibernate/JPA.
I set up the 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 is 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 I use the classes, Hibernate creates in both banks the two tables. That is, I need to take the users
(Mysql) and save to usuarios
(Postgresql), but Hibernate creates the tables users
and usuarios
in Mysql and the user tables and usuarios
in Postgresql as well, and what I want is just to create the usuarios
only on the basis of Postgresql.
Some solution?
I didn’t quite understand your problem: you don’t want me to manage the tables in the two bases and besides you’re not being able to do the queries, is that it? Or just the generation at the bottom that’s wrong? Why even generating the tables in both databases, if you use the correct EM will save the data in the other. Ie: using Mysql EM to read
users
will recover the data from there, treats as you need and saved inusuarios
using the Postgresql EM.– Bruno César