Persistenten JPA-Entity mit CrudRepository

Haben Sie Probleme mit dem speichern von JPA Entity durch CrudRepository. Es scheint wieder die ursprüngliche Objekt, das übergeben wurde, um es ohne speichern des Objekts in der Datenbank. Ich weiß, das ist nicht der richtige Weg, es zu tun, aber für Testzwecke, wenn ich eine Instanz von TransactionSynchronizationManager vor dem speichern, scheint es fortbestehen richtig. Dies führt mich zu denken, vielleicht ist es ein Problem der Transaction Manager?

Zusätzlich, wenn ich verwerfen Sie das repository und die Entity-Manager - (em) bekomme ich das gleiche Ergebnis, jedoch wenn ich den Anruf em.flush(), bekomme ich die Exception "Transactionrequiredexception, No Transaction in Progress".

@Transactional
public class UserServiceImpl implements UserService{

    @Autowired
    private UserRepository userRepository;

    @Autowired
    private EntityManagerFactory emf;

    @Override
    @Transactional(readOnly=false)
    public User save(User user) {

//  EntityManager em = emf.createEntityManager();
    //Object persists when adding following line
//  TransactionSynchronizationManager.bindResource(emf , new EntityManagerHolder(em)); 
        return  userRepository.save(user);
    }

}


@ComponentScan(basePackages = {"..."})
@Import(value={DataContextConfig.class,SecurityConfig.class})
public class AppConfig{
}

@Configuration
@ComponentScan(basePackages = {".."})
@Import(DataConfig.class)
public class DataContextConfig {

}

@Configuration
@EnableTransactionManagement(mode=AdviceMode.ASPECTJ)
@EnableJpaRepositories(value={"com.repository"}, entityManagerFactoryRef="entityManagerFactory", transactionManagerRef="transactionManager")
@PropertySource("classpath:data.properties")
public class DataConfig {
... 
    @Bean
    public PlatformTransactionManager transactionManager() { 
        JpaTransactionManager txManager = new JpaTransactionManager(); 
        txManager.setEntityManagerFactory((EntityManagerFactory) entityManagerFactory());
        return txManager; 
    }
    @Bean
    public LocalContainerEntityManagerFactoryBean entityManagerFactory() {      
        LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean();
        factory.setJpaVendorAdapter(new HibernateJpaVendorAdapter());
        factory.setPackagesToScan("...");
        factory.setJpaPropertyMap(jpaProperties());
        factory.setDataSource(dbSource());
        return factory; 
    }


        @Bean
        public DriverManagerDataSource dbSource(){  
            DriverManagerDataSource driverManagerDataSource = new DriverManagerDataSource();
            driverManagerDataSource.setDriverClassName(environment.getRequiredProperty("jdbc.driverClassName"));
            driverManagerDataSource.setUrl(environment.getRequiredProperty("jdbc.url"));
            driverManagerDataSource.setUsername(environment.getRequiredProperty("jdbc.username"));
            driverManagerDataSource.setPassword(environment.getRequiredProperty("jdbc.password"));      
            return driverManagerDataSource;
        }

    }

Hochgeladen habe ich ein kleines Projekt, dass Isolate die Ausnahme. Zip, und führen Sie AccountTester.class http://www14.zippyshare.com/v/81636273/file.html

  • Sie lassen sich nicht öffnen-Sitzung, bevor Sie save. hast du?
  • Sehr hilfreich, wenn man die volle stack-trace.
  • Es gibt keinen Stacktrace. Nicht ohne Fehler
  • Ich denke, Sie versuchen zu userRepository.save(user); ohne öffnen Hibernate-session und trnsaction das ist zumindest der Grund, warum Sie immer "No Transaction in Progress" - Fehler.
  • Ich habe die @EnableTransactionManagement(mode=AdviceMode.ASPECTJ) Anmerkungen in der @Config-Klasse.
  • siehe post aktualisieren

InformationsquelleAutor Jamie White | 2014-06-28
Schreibe einen Kommentar