gpt4 book ai didi

java - 基于java的配置上的Spring Data CrudRepository - EntityManager - 没有事务正在进行

转载 作者:行者123 更新时间:2023-11-30 03:45:40 26 4
gpt4 key购买 nike

我已经阅读过我相信尝试过所有关于此问题的帖子,但没有找到正确的答案。我在我的 spring mvc 项目中使用基于 java 的配置,并想尝试 Spring CrudRepository,以摆脱 DAO,而那就是整个 hell 崩溃的时候:在持久化后刷新时以“没有事务正在进行”开始:- 尝试将 @Transactional 添加到方法中 - 此处找到的所有变体都不起作用- 尝试更改配置,但由于它是基于java的,所以大多数答案都是基于xml的。也不走运。所以最后我要问:

如何配置我的项目以使 CrudRepository 持久存在,或者如何使用 java 配置创建 Spring EntityManager。

这是我的配置文件的最后一个版本:

@Configuration
@ComponentScan(basePackages = { "ba.fit.vms" })
@ImportResource(value = "classpath:spring-security-context.xml")
@EnableTransactionManagement
@EnableJpaRepositories
public class AppConfig {

@Bean
public static PropertyPlaceholderConfigurer propertyPlaceholderConfigurer() {
PropertyPlaceholderConfigurer ppc = new PropertyPlaceholderConfigurer();
ppc.setLocation(new ClassPathResource("/persistence.properties"));
return ppc;
}


// Security Configuration
@Bean
public KorisnickiServis korisnickiServis(){
return new KorisnickiServis();
}

@Bean
public TokenBasedRememberMeServices rememberMeServices() {
return new TokenBasedRememberMeServices("remember-me-key", korisnickiServis());
}

@Bean
public PasswordEncoder passwordEncoder() {
return new StandardPasswordEncoder();
}

// Jpa Configuration
@Value("${dataSource.driverClassName}")
private String driver;
@Value("${dataSource.url}")
private String url;
@Value("${dataSource.username}")
private String username;
@Value("${dataSource.password}")
private String password;
@Value("${hibernate.dialect}")
private String dialect;
@Value("${hibernate.hbm2ddl.auto}")
private String hbm2ddlAuto;

@Bean
public DataSource configureDataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName(driver);
dataSource.setUrl(url);
dataSource.setUsername(username);
dataSource.setPassword(password);
return dataSource;
}

@Bean
public LocalContainerEntityManagerFactoryBean configureEntityManagerFactory() {
LocalContainerEntityManagerFactoryBean entityManagerFactoryBean = new LocalContainerEntityManagerFactoryBean();
entityManagerFactoryBean.setDataSource(configureDataSource());
entityManagerFactoryBean.setPackagesToScan("ba.fit.vms");
entityManagerFactoryBean.setJpaVendorAdapter(new HibernateJpaVendorAdapter());

Properties jpaProperties = new Properties();
jpaProperties.put(org.hibernate.cfg.Environment.DIALECT, dialect);
jpaProperties.put(org.hibernate.cfg.Environment.HBM2DDL_AUTO, hbm2ddlAuto);
//jpaProperties.put(org.hibernate.cfg.Environment.SHOW_SQL, true);
entityManagerFactoryBean.setJpaProperties(jpaProperties);

return entityManagerFactoryBean;
}


@Bean
public PlatformTransactionManager transactionManager() {
final JpaTransactionManager transactionManager = new JpaTransactionManager();
transactionManager.setEntityManagerFactory(configureEntityManagerFactory().getObject());

return transactionManager;
}

}

我尝试了多种变体,但总是收到相同的“没有交易正在进行”错误。另外,看一下存储库:Lokacija存储库:

@Transactional
public interface LokacijaRepository extends CrudRepository<Lokacija, Long> {

}

和 LokacijaRepositoryImpl:

@Repository
public class LokacijaRepositoryImpl implements LokacijaRepository {

protected static Logger logger = Logger.getLogger("repo");
@PersistenceContext // tried this as well(type= PersistenceContextType.EXTENDED)
private EntityManager entityManager;


@Override
@Transactional// tried number of variations here as well, like REQUIRED...
public <S extends Lokacija> S save(S entity) {
logger.debug("trying to save!");
try {
entityManager.persist(entity);
entityManager.flush();
return entity;
} catch (Exception e) {
logger.debug("error: "+ e.toString());
return null;
}

}

如果您需要其他任何信息来帮助我解决这个问题,请告诉我。

最佳答案

问题是您正在尝试创建 LokacijaRepository 的实现(在 LokacijaRepositoryImpl 中),而 Spring Data JPA(您已配置)正在尝试执行相同的操作.

您需要做的是:

  1. 完全删除LokacijaRepositoryImpl
  2. configureEntityManagerFactory 更改为 entityManagerFactory entityManagerFactoryRef=configureEntityManagerFactory 添加到 @EnableJpaRepositories

关于java - 基于java的配置上的Spring Data CrudRepository - EntityManager - 没有事务正在进行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25788569/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com