无法解决错误"save is not valid without active transaction"



我无法解决错误

如果没有活动事务,保存无效

我的代码:

public class PersistenceJPAConfig {
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
    LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
    em.setDataSource(dataSource());
    em.setPackagesToScan(new String[] { "self.experiment.dto" });
    JpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
    em.setJpaVendorAdapter(vendorAdapter);
    em.setJpaProperties(additionalProperties());
    return em;
}
@Bean
public SessionFactory sessionFactory(HibernateEntityManagerFactory hemf) {
    return hemf.getSessionFactory();
}
@Bean
public EntityManager entityManager(){
    return entityManagerFactory().getObject().createEntityManager();
}
@Bean
public DataSource dataSource() {
    DriverManagerDataSource dataSource = new DriverManagerDataSource();
    dataSource.setDriverClassName("com.mysql.jdbc.Driver");
    dataSource.setUrl("jdbc:mysql://localhost:3306/test?autoReconnect=true&useSSL=false");
    dataSource.setUsername("root");
    dataSource.setPassword("root");
    return dataSource;
}
@Bean
public PlatformTransactionManager transactionManager(SessionFactory sessionFactory) {
    HibernateTransactionManager hibernateTransactionManager = new HibernateTransactionManager();
    hibernateTransactionManager.setSessionFactory(sessionFactory);
    return hibernateTransactionManager;
}
Properties additionalProperties() {
    Properties properties = new Properties();
    properties.setProperty("hibernate.connection.driver_class", "com.mysql.jdbc.Driver");
    properties.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQLDialect");
    properties.setProperty("hibernate.current_session_context_class", "thread");
    properties.setProperty("hibernate.show_sql", "false");
    return properties;
}
}
public class UserBL {
@Autowired
UserDAO userDao;
@Transactional(transactionManager="transactionManager")
public void saveUsers(){
    User user = new User();
    user.setName("Bob");
    userDao.insert(user);
}
}

在很多博客上,我读到从 JPA 属性中删除hibernate.current_session_context_class将解决此问题。但是当我删除它时,我收到以下错误

未配置当前会话上下文!

您正在配置 SessionFactory 和 EntityManagerFactory。删除所有休眠特定内容:

@Configuration
public class PersistenceJPAConfig {
    @Bean
    public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
        LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
        em.setDataSource(dataSource());
        em.setPackagesToScan(new String[] { "self.experiment.dto" });
        JpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
        em.setJpaVendorAdapter(vendorAdapter);
        em.setJpaProperties(additionalProperties());
        return em;
    }
    @Bean
    public DataSource dataSource() {
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://localhost:3306/test?autoReconnect=true&useSSL=false");
        dataSource.setUsername("root");
        dataSource.setPassword("root");
        return dataSource;
    }
    @Bean
    public PlatformTransactionManager transactionManager(EntityManagerFactory emf) {
        JpaTransactionManager transactionManager = new JpaTransactionManager();
        transactionManager.setEntityManagerFactory(emf);
        return transactionManager;
    }
    Properties additionalProperties() {
        Properties properties = new Properties();
        properties.setProperty("hibernate.connection.driver_class", "com.mysql.jdbc.Driver");
        properties.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQLDialect");
        properties.setProperty("hibernate.show_sql", "false");
        return properties;
    }
}

服务

public class UserBL {
@Autowired
UserDAO userDao;
@Transactional
public void saveUsers(){
    User user = new User();
    user.setName("Bob");
    userDao.insert(user);
}
}

public class UserDAO {
    @PersistenceContext
    private EntityManager em;
}

相关内容

最新更新