3
respostas

Dúvida pom.xml e JPAConfiguration

Eu uso SQLserver 2014, como devo proceder com minhas configurações no pom.xml e na JPAConfiguration?

3 respostas

Oi Carlos

No lugar de adicionar o driver do mysql-connector-java no seu pom.xml, você vai precisar adicionar o driver do SQL Server.

mas infelizmente ele não tem uma versão publicada no maven.

Como alternativa você pode instalar manualmente. Pra isso, basta baixar o JAR:

https://www.microsoft.com/en-us/download/details.aspx?displaylang=en&id=11774

e rodar o comando:

mvn install:install-file -Dfile=sqljdbc4.jar -DgroupId=com.microsoft.sqlserver -DartifactId=sqljdbc4 -Dversion=4.0 -Dpackaging=jar

assim você consegue adicionar a dependência local no seu POM:

<dependency>
  <groupId>com.microsoft.sqlserver</groupId>
  <artifactId>sqljdbc4</artifactId>
  <version>4.0</version>
</dependency>

Na parte do JPAConfiguration, basta adicionar o login, senha e database da forma que está fazendo, e mudar a string de conexão pra jdbc:sqlserver://... no lugar de jdbc:mysql://

Olá Rodrigo!

realizei conforme solicitado, porem deu o seguinte erro.

root cause

org.hibernate.exception.JDBCConnectionException: Could not open connection
    org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:132)
    org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:49)
import java.util.Properties;

import javax.persistence.EntityManagerFactory;

import org.springframework.context.annotation.Bean;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.JpaVendorAdapter;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
import org.springframework.transaction.annotation.EnableTransactionManagement;

@EnableTransactionManagement
public class JPAConfiguration {

    @Bean
    public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
        LocalContainerEntityManagerFactoryBean factoryBean = new LocalContainerEntityManagerFactoryBean();

        JpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();

        factoryBean.setJpaVendorAdapter(vendorAdapter );

        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setUsername("sa"); //("root");
        dataSource.setPassword("1234");
        dataSource.setUrl("jdbc:sqlserver://localhost:3306/casadocodigo");
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        factoryBean.setDataSource(dataSource);

        Properties props = new Properties();
        props.setProperty("hibernate.dialect" , "org.hibernate.dialect.MySQL5Dialect");
        props.setProperty("hibernate.show_sql", "true");
        props.setProperty("hibernate.hbm2ddl.auto", "update");

        factoryBean.setJpaProperties(props);

        factoryBean.setPackagesToScan("br.com.casadocodigo.loja.models");

        return factoryBean;

    }

    @Bean
    public JpaTransactionManager transactionManager(EntityManagerFactory emf) {
        return new JpaTransactionManager(emf);
    }    


}

Oi Carlos,

Faltou alterar, também, os outros parâmetros específicos do mysql nesse trecho:

        dataSource.setUrl("jdbc:sqlserver://localhost:3306/casadocodigo");
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        factoryBean.setDataSource(dataSource);

        Properties props = new Properties();
        props.setProperty("hibernate.dialect" , "org.hibernate.dialect.MySQL5Dialect");

Precisa olhar a documentação específica da versão que você está usando, para ter certeza, mas meu chute é que isso funcionaria pra você:

    dataSource.setUrl("jdbc:sqlserver://localhost:3306/casadocodigo");
    dataSource.setDriverClassName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
    factoryBean.setDataSource(dataSource);

    Properties props = new Properties();
    props.setProperty("hibernate.dialect" , "org.hibernate.dialect.SQLServerDialect");

Pode testar isso?