Migrar configurações do PostgreSQL para o MySQL

Pessoal,

Estou estudando Java para web, e estou com um projeto utilizando o driver do PostgreSQL, porém eu tenho mais afinidade com o MySQL e gostaria de mudar a estrutura do meu projeto para o MySQL

persistence.xml

[code]<?xml version="1.0" encoding="UTF-8"?>

<persistence-unit name="JSFCrudPU" transaction-type="RESOURCE_LOCAL">
	<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/JSFCrudDB" />
		<property name="javax.persistence.jdbc.user" value="root" />
		<property name="javax.persistence.jdbc.password" value="root" />
		<property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect" />
		<property name="hibernate.connection.shutdown" value="true" />
		<property name="hibernate.hbm2ddl.auto" value="update" />
		<property name="hibernate.show_sql" value="true" />
        <property name="hibernate.format_sql" value="true"/>
	</properties>
</persistence-unit>

[/code]

Tentei fazer a migração e ficou dessa forma o código(já estou com o jar do mysql dentro da minha lib):

[code]<?xml version="1.0" encoding="UTF-8"?>

<persistence-unit name="JSFCrudPU" transaction-type="RESOURCE_LOCAL">
	<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/JSFCrudDB" />
		<property name="javax.persistence.jdbc.user" value="root" />
		<property name="javax.persistence.jdbc.password" value="" />
		<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
		<property name="hibernate.connection.shutdown" value="true" />
		<property name="hibernate.hbm2ddl.auto" value="update" />
		<property name="hibernate.show_sql" value="true" />
        <property name="hibernate.format_sql" value="true"/>
	</properties>
</persistence-unit>

[/code]

Está correto?

Você é quem deveria dizer se está correto. Funcionou?

Não funcionou e não apresenta nenhuma mensagem de erro, preciso saber se é nessa estrutura para verificar se o problema está em outro arquivo.

a sua migração é somente dos dados ou de todo ou controle do banco de dados?

o controle de postgree para mysql eh muito diferente… postgree eh muito mais completo.

agora se for somente dos dados, vc pode fazer uma coleção dos objetos conforme as tabelas dos banco de dados e registrar eles no mysql.

eu normalmente exporto o registro das informações em XML pois assim qualquer banco pode acessar.

Ah, aí sim, podemos tentar alguma coisa.
Bom, eu não gosto de usar isso:

<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />  
            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost/JSFCrudDB" />  
            <property name="javax.persistence.jdbc.user" value="root" />  
            <property name="javax.persistence.jdbc.password" value="" />  

Já que está usando o hibernate como provider, configure como hibernate:

<property name="hibernate.driver_class" value="com.mysql.jdbc.Driver" />  
            <property name="hibernate.connection.url" value="jdbc:mysql://localhost/JSFCrudDB" />  
            <property name="hibernate.connection.username" value="root" />  
            <property name="hibernate.connection.password" value="" />  

Na propriedade url, eu gosto de colocar a porta do MySQL:

<property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/JSFCrudDB" />  

De resto, me parece ok.
O que eu gostaria de ver é como você cria o EntityManagerFactory

[quote=nebster]a sua migração é somente dos dados ou de todo ou controle do banco de dados?

o controle de postgree para mysql eh muito diferente… postgree eh muito mais completo.

agora se for somente dos dados, vc pode fazer uma coleção dos objetos conforme as tabelas dos banco de dados e registrar eles no mysql.

eu normalmente exporto o registro das informações em XML pois assim qualquer banco pode acessar.[/quote]
Sei não, mas ele se refere à migração de estrutura completa, algo como deixar de usar PG e começar a usar MySQL.
Vide a configuração que ele apresenta…

se quiser exportar todas as regras e talz, melhor fazer exportação com formato SQL e depois importar dentro do mysql.

[quote=drsmachado][quote=nebster]a sua migração é somente dos dados ou de todo ou controle do banco de dados?

o controle de postgree para mysql eh muito diferente… postgree eh muito mais completo.

agora se for somente dos dados, vc pode fazer uma coleção dos objetos conforme as tabelas dos banco de dados e registrar eles no mysql.

eu normalmente exporto o registro das informações em XML pois assim qualquer banco pode acessar.[/quote]
Sei não, mas ele se refere à migração de estrutura completa, algo como deixar de usar PG e começar a usar MySQL.
Vide a configuração que ele apresenta…[/quote]

Isso mesmo, eu vou migrar tudo mesmo, por completo.
Eu tenho o projeto rodando o PG e vou começar a utilizar o MySQL no lugar do PG.

[quote=marlonmaxwel][quote=drsmachado][quote=nebster]a sua migração é somente dos dados ou de todo ou controle do banco de dados?

o controle de postgree para mysql eh muito diferente… postgree eh muito mais completo.

agora se for somente dos dados, vc pode fazer uma coleção dos objetos conforme as tabelas dos banco de dados e registrar eles no mysql.

eu normalmente exporto o registro das informações em XML pois assim qualquer banco pode acessar.[/quote]
Sei não, mas ele se refere à migração de estrutura completa, algo como deixar de usar PG e começar a usar MySQL.
Vide a configuração que ele apresenta…[/quote]

Isso mesmo, eu vou migrar tudo mesmo, por completo.
Eu tenho o projeto rodando o PG e vou começar a utilizar o MySQL no lugar do PG.[/quote]

Faz como eu falei então eh a mais rapida.
“melhor fazer exportação com formato SQL e depois importar dentro do mysql.”

SEM JAVA, direto do banco de dados.

[quote=drsmachado]Ah, aí sim, podemos tentar alguma coisa.
Bom, eu não gosto de usar isso:

<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />  
            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost/JSFCrudDB" />  
            <property name="javax.persistence.jdbc.user" value="root" />  
            <property name="javax.persistence.jdbc.password" value="" />  

Já que está usando o hibernate como provider, configure como hibernate:

<property name="hibernate.driver_class" value="com.mysql.jdbc.Driver" />  
            <property name="hibernate.connection.url" value="jdbc:mysql://localhost/JSFCrudDB" />  
            <property name="hibernate.connection.username" value="root" />  
            <property name="hibernate.connection.password" value="" />  

Na propriedade url, eu gosto de colocar a porta do MySQL:

<property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/JSFCrudDB" />  

De resto, me parece ok.
O que eu gostaria de ver é como você cria o EntityManagerFactory[/quote]

Olha

[code]package com.dao;

import java.io.Serializable;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.NoResultException;
import javax.persistence.Persistence;
import javax.persistence.Query;
import javax.persistence.criteria.CriteriaQuery;

abstract class GenericDAO implements Serializable {
private static final long serialVersionUID = 1L;

private static final EntityManagerFactory emf = Persistence.createEntityManagerFactory("JSFCrudPU");
private EntityManager em;

private Class<T> entityClass;

public void beginTransaction() {
	em = emf.createEntityManager();

	em.getTransaction().begin();
}

public void commit() {
	em.getTransaction().commit();
}

public void rollback() {
	em.getTransaction().rollback();
}

public void closeTransaction() {
	em.close();
}

public void commitAndCloseTransaction() {
	commit();
	closeTransaction();
}

public void flush() {
	em.flush();
}

public void joinTransaction() {
	em = emf.createEntityManager();
	em.joinTransaction();
}

public GenericDAO(Class<T> entityClass) {
	this.entityClass = entityClass;
}

public void save(T entity) {
	em.persist(entity);
}

 protected void delete(Object id, Class<T> classe) {
    T entityToBeRemoved = em.getReference(classe, id);

    em.remove(entityToBeRemoved);
 }

public T update(T entity) {
	return em.merge(entity);
}

public T find(int entityID) {
	return em.find(entityClass, entityID);
}

public T findReferenceOnly(int entityID) {
	return em.getReference(entityClass, entityID);
}

@SuppressWarnings({ "unchecked", "rawtypes" })
public List<T> findAll() {
	CriteriaQuery cq = em.getCriteriaBuilder().createQuery();
	cq.select(cq.from(entityClass));
	return em.createQuery(cq).getResultList();
}

@SuppressWarnings("unchecked")
protected T findOneResult(String namedQuery, Map<String, Object> parameters) {
	T result = null;

	try {
		Query query = em.createNamedQuery(namedQuery);

		if (parameters != null && !parameters.isEmpty()) {
			populateQueryParameters(query, parameters);
		}

		result = (T) query.getSingleResult();

	} catch (NoResultException e) {
		System.out.println("No result found for named query: " + namedQuery);
	} catch (Exception e) {
		System.out.println("Error while running query: " + e.getMessage());
		e.printStackTrace();
	}

	return result;
}

private void populateQueryParameters(Query query, Map<String, Object> parameters) {
	for (Entry<String, Object> entry : parameters.entrySet()) {
		query.setParameter(entry.getKey(), entry.getValue());
	}
}

}[/code]

[quote=nebster][quote=marlonmaxwel][quote=drsmachado][quote=nebster]a sua migração é somente dos dados ou de todo ou controle do banco de dados?

o controle de postgree para mysql eh muito diferente… postgree eh muito mais completo.

agora se for somente dos dados, vc pode fazer uma coleção dos objetos conforme as tabelas dos banco de dados e registrar eles no mysql.

eu normalmente exporto o registro das informações em XML pois assim qualquer banco pode acessar.[/quote]
Sei não, mas ele se refere à migração de estrutura completa, algo como deixar de usar PG e começar a usar MySQL.
Vide a configuração que ele apresenta…[/quote]

Isso mesmo, eu vou migrar tudo mesmo, por completo.
Eu tenho o projeto rodando o PG e vou começar a utilizar o MySQL no lugar do PG.[/quote]

Faz como eu falei então eh a mais rapida.
“melhor fazer exportação com formato SQL e depois importar dentro do mysql.”

SEM JAVA, direto do banco de dados.[/quote]

Vou fazer isso, se der algum erro eu posto aqui.

Pessoal,

Efetuei todas as mudanças no persistence.xml, porém está dando o erro:

10:15:15,301 ERROR SchemaUpdate:175 - could not get database metadata java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost/jsfcruddb
As configurações deste arquivo está tudo correto.
E logo abaixo deste erro mostra esse erro 10:20:27,424 ERROR SessionFactoryImpl:422 - Error in named query: Person.findUserByIdWithDogs e outro similiar, olha as query:
Antes:

@NamedQuery(name = "Person.findUserByIdWithDogs", query = "select p from Person p left join fetch p.dogs where p.id = :personId")
@NamedQuery(name = "User.findUserByEmail", query = "select u from User u where u.email = :email")

Agora:

@NamedQuery(name = "Person.findUserByIdWithDogs", query = "select * from Person left join fetch dogs where id = :personId") @NamedQuery(name = "User.findUserByEmail", query = "select * from User where email = :email")
Também tentei desta forma:

@NamedQuery(name = "Person.findUserByIdWithDogs", query = "select * from Person left join fetch dogs where id = ?") @NamedQuery(name = "User.findUserByEmail", query = "select * from User where email = ?")

Alguém?