我读过了,我相信尝试了所有关于此的帖子,但没有找到正确答案的运气。 我正在使用基于Java的配置和我的spring mvc项目,并且想要尝试使用Spring CrudRepository来摆脱DAO,那就是当整个地狱崩溃时: 在刷新后以“无事务正在进行”开始: - 尝试在方法中添加@Transactional - 这里找不到任何变体可用 - 尝试更改配置,但由于它是基于java的,因此大多数答案都是基于xml的。没有运气。 因此,最后我不得不问:基于Java的配置的Spring Data CrudRepository - EntityManager - 没有事务正在进行
如何配置我的项目,使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;
}
}
我已经试过变化的数量,但总是收到相同的“无交易正在进行中”的错误。 此外,就在回购一瞥: LokacijaRepository:
@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;
}
}
如果你有什么事能帮助我找到这一个,让我知道。
如果您正在使用Spring数据JPA(这似乎情况就是这样),为什么你有'LokacijaRepositoryImpl'? – geoand 2014-09-11 14:02:44
我想我虽然这是必须的?我该怎么做? – Blejzer 2014-09-11 14:17:59
我不敢相信!我删除了LokacijaRepositoryImpl,并得到这个错误:“没有名为'entityManagerFactory'的bean被定义”。我查看了文档,它说使用默认名称:'entityManagerFactory'。我将方法的名称从configureEntityManagerFactory更改为entityManagerFactory,就是这样! – Blejzer 2014-09-11 14:21:37