简体   繁体   中英

Spring boot with JPA entity Second repository query is fine but can't save with no error

Like tittle says I Have two DataSource in my application and the first repository is work fine , but my second repository can't save update or delete only query works good . when i check the console there is no error appear . Can some one help?

first repository config

package com.iisigroup.product.insightplatform.config;

import com.iisigroup.product.insightplatform.repository.jpa.CustomMsgRutLogsRepository;
import com.iisigroup.product.insightplatform.repository.jpa.impl.BaseRepositoryImpl;
import com.iisigroup.product.insightplatform.repository.jpa.impl.MsgRutLogsGeneralRepositoryImpl;
import com.iisigroup.product.insightplatform.repository.jpa.impl.MsgRutLogsOracleRepositoryImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.env.Environment;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.jdbc.core.JdbcTemplate;
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.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;

import javax.persistence.EntityManagerFactory;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(basePackages = "com.iisigroup.product.insightplatform.repository.jpa"
        , repositoryBaseClass = BaseRepositoryImpl.class,
        transactionManagerRef = "JPATra", entityManagerFactoryRef = "entityManagerFactory1")
public class JPAConfig {
    @Autowired
    private DataSource dataSource;

    @Autowired
    private Environment env;

    @Bean
    public JdbcTemplate jdbcTemplate() {
        return new JdbcTemplate(dataSource);
    }

    @Primary
    @Bean(name = "JPATra")
    public PlatformTransactionManager transactionManager1() {
        final JpaTransactionManager txManager = new JpaTransactionManager();
        txManager.setEntityManagerFactory(entityManagerFactory1());
        return txManager;
    }


    @Bean(name = "entityManagerFactory1")
    @Primary
    public EntityManagerFactory entityManagerFactory1() {
        final LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();

        em.setDataSource(dataSource);
        JpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
        em.setJpaProperties(hibernateProperties());
        em.setJpaVendorAdapter(vendorAdapter);
        em.setPackagesToScan(new String[]{"com.iisigroup.product.insightplatform.domain.jpa"});
        em.setPersistenceUnitName("emfBW");
        em.afterPropertiesSet();
        return em.getObject();
    }

    private Properties hibernateProperties() {
        Properties properties = new Properties();
        properties.setProperty("hibernate.show_sql", "false");
        properties.setProperty("hibernate.max_fetch_depth", "3");
        properties.setProperty("hibernate.jdbc.fetch_size", "50");
        properties.setProperty("hibernate.jdbc.batch_size",
                env.getProperty("spring.jpa.properties.hibernate.jdbc.batch_size"));
        properties.setProperty("hibernate.enable_lazy_load_no_trans", "true");
        return properties;
    }


}

second repository

package com.iisigroup.product.insightplatform.config;

import com.iisigroup.product.insightplatform.repository.traffic.BaseRepositoryImpl;
import com.zaxxer.hikari.HikariDataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.jdbc.core.JdbcTemplate;
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.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;

import javax.persistence.EntityManagerFactory;
import javax.persistence.PersistenceContext;
import java.util.Properties;

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(basePackages = "com.iisigroup.product.insightplatform.repository.traffic",
        repositoryBaseClass = BaseRepositoryImpl.class,
        entityManagerFactoryRef = "trafficentityManagerFactory",
        transactionManagerRef = "traffictransactionManager")
public class TrafficJPAConfig {
    @Autowired
    private Environment env;

    @Bean(name = "trafficDatasource")
    public HikariDataSource trafficDatasource() {
        HikariDataSource dataSource = new HikariDataSource();
        dataSource.setJdbcUrl("secondUrl");
        dataSource.setUsername("secondUser");
        dataSource.setPassword("secondPass");
        dataSource.setMaximumPoolSize(8);
        dataSource.setIdleTimeout(15);
        dataSource.setConnectionTimeout(3000);
        return dataSource;
    }

    @Bean
    public JdbcTemplate trafficjdbcTemplate() {
        return new JdbcTemplate(trafficDatasource());
    }
    @PersistenceContext(unitName="traffic")
    @Bean(name = "traffictransactionManager")
    public PlatformTransactionManager traffictransactionManager() {
        final  JpaTransactionManager txManager = new JpaTransactionManager();
        txManager.setEntityManagerFactory(productEntityManager().getObject());
        return txManager;
    }

    @PersistenceContext(unitName="traffic")
    @Bean(name = "trafficentityManagerFactory")
    public EntityManagerFactory trafficentityManagerFactory() {
        final LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
        em.setDataSource(trafficDatasource());
        JpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
        em.setJpaProperties(hibernateProperties());
        em.setJpaVendorAdapter(vendorAdapter);
        em.setPackagesToScan(new String[]{"com.iisigroup.product.insightplatform.repository.traffic","com.iisigroup.product.insightplatform.domain.jpa"});
        em.setPersistenceUnitName("traffic");
        em.afterPropertiesSet();
        return em.getObject();
    }
    @Bean
    @PersistenceContext(unitName="traffic")
    public LocalContainerEntityManagerFactoryBean productEntityManager() {
        final LocalContainerEntityManagerFactoryBean em
                = new LocalContainerEntityManagerFactoryBean();
        em.setDataSource(trafficDatasource());
        em.setPackagesToScan(
                new String[] {"com.iisigroup.product.insightplatform.repository.traffic","com.iisigroup.product.insightplatform.domain.jpa"});
        JpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
        em.setJpaVendorAdapter(vendorAdapter);
        em.setJpaProperties(hibernateProperties());

        return em;
    }
    private Properties hibernateProperties() {
        Properties properties = new Properties();
        properties.setProperty("hibernate.show_sql", "true");
        properties.setProperty("hibernate.max_fetch_depth", "3");
        properties.setProperty("hibernate.jdbc.fetch_size", "50");
        properties.setProperty("hibernate.jdbc.batch_size",
                env.getProperty("spring.jpa.properties.hibernate.jdbc.batch_size"));
        properties.setProperty("hibernate.enable_lazy_load_no_trans", "true");
        return properties;
    }


}

And I try to override delete method with under code , it's work great

    @Override
    public void delete(String s) {
        TrafficJPAConfig cc = new TrafficJPAConfig();
        JdbcTemplate temp = cc.trafficjdbcTemplate();
        String sql = String.format("delete from UserColumnGrpFieldValueSTB where UUID ='%s' ", s);
        temp.execute(sql);

//        super.delete(s);
    }

after using second Data source in isolated environment , it didn't make any difference. But it work after I change my second Data source config like my code below, it works fine. I don't know the reason it work and i'm curious of that, any one knows why?

@Configuration
//@ComponentScan("com.iisigroup.product.insightplatform.domain.jpa")
@EnableTransactionManagement
@EnableJpaRepositories(basePackages = "com.iisigroup.product.insightplatform.repository.traffic",
        repositoryBaseClass = BaseRepositoryImpl.class,
        entityManagerFactoryRef = "trafficentityManagerFactory",
        transactionManagerRef = "traffictransactionManager")
public class TrafficJPAConfig {
    @Autowired
    private Environment env;

    @Bean(name = "trafficDatasource")
    public HikariDataSource trafficDatasource() {
        HikariDataSource dataSource = new HikariDataSource();
        dataSource.setJdbcUrl("secondDatasouce");
        dataSource.setUsername("secondDatasouce");
        dataSource.setPassword("secondDatasouce");
        dataSource.setMaximumPoolSize(8);
        dataSource.setIdleTimeout(15);
        dataSource.setConnectionTimeout(3000);
        return dataSource;
    }

    @Bean
    public JdbcTemplate trafficjdbcTemplate() {
        return new JdbcTemplate(trafficDatasource());
    }
    @PersistenceContext(unitName="traffic")
    @Bean(name = "traffictransactionManager")
    public PlatformTransactionManager traffictransactionManager() {
        final  JpaTransactionManager txManager = new JpaTransactionManager();
        txManager.setEntityManagerFactory(trafficentityManagerFactory());
        return txManager;
    }

    @PersistenceContext(unitName="traffic")
    @Bean(name = "trafficentityManagerFactory")
    public EntityManagerFactory trafficentityManagerFactory() {
        final LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
        em.setDataSource(trafficDatasource());
        JpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
        em.setJpaProperties(hibernateProperties());
        em.setJpaVendorAdapter(vendorAdapter);
//         em.setEntityManagerFactoryInterface(MultiEntityManagerFactory.class);
        em.setPackagesToScan(new String[]{"com.iisigroup.product.insightplatform.repository.traffic","com.iisigroup.product.insightplatform.domain.jpa"});
        em.setPersistenceUnitName("traffic");
        em.afterPropertiesSet();
        return em.getObject();
    }
//    @Bean
//    @PersistenceContext(unitName="traffic")
//    public LocalContainerEntityManagerFactoryBean productEntityManager() {
//        final LocalContainerEntityManagerFactoryBean em
//                = new LocalContainerEntityManagerFactoryBean();
//        em.setDataSource(trafficDatasource());
//        em.setPackagesToScan(
//                new String[] {"com.iisigroup.product.insightplatform.repository.traffic","com.iisigroup.product.insightplatform.domain.jpa"});
//        JpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
////        final HashMap<String, Object> properties = new HashMap<String, Object>();
////        properties.put("hibernate.hbm2ddl.auto", "auto");
////        properties.put("hibernate.dialect", "org.hibernate.dialect.H2Dialect");
////        em.setJpaPropertyMap(properties);
//        em.setJpaVendorAdapter(vendorAdapter);
//        em.setJpaProperties(hibernateProperties());
//
//        return em;
//    }
    private Properties hibernateProperties() {
        Properties properties = new Properties();
        properties.setProperty("hibernate.show_sql", "true");
        properties.setProperty("hibernate.max_fetch_depth", "3");
        properties.setProperty("hibernate.jdbc.fetch_size", "50");
        properties.setProperty("hibernate.jdbc.batch_size",
                env.getProperty("spring.jpa.properties.hibernate.jdbc.batch_size"));
        properties.setProperty("hibernate.enable_lazy_load_no_trans", "true");
        return properties;
    }


}


The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM