2016-12-15 10 views
0

私はentityManager.remove()関数を扱うことができません。
オブジェクトを削除しようとすると、エラーや例外は発生しませんが、レコードはデータベースに残ります。ここでSpring JPA:entityManager remove not working

は私のEntityManager定義される:最後に、私は私の問題を解決した

@Repository("adminAccountRepository") 
@Transactional(propagation = Propagation.MANDATORY) 
public class AccountRepositoryImpl implements AccountRepository { 
    @PersistenceContext(unitName = "adminManager") 
    private EntityManager em; 

    @Override 
    public Account findByLogin(String login) { 
     Query query = em.createNamedQuery("Account.findByLogin"); 
     query.setParameter("login", login); 
     Account account = (Account) query.getSingleResult(); 
     return account; 
    } 

    @Override 
    public void delete(Account account) { 
     try {    
      em.remove(account); 
     } catch (Exception e) { 
      e.getCause(); 
     } 
    } 
} 
+0

なぜem.remove(em.merge(account)); 'を実行していますか? – smsnheck

+0

私はそれを削除するのを忘れました。 em.remove(account);にする必要があります。 – piotrb

答えて

0

@Configuration 
@EnableJpaRepositories 
@ComponentScan("pl.lodz.p.admin") 

@EnableTransactionManagement 
class AdminDbConfig {  

    @Bean 
    @ConfigurationProperties(prefix = "spring.datasource") 
    public DataSource dataSource() { 
     return DataSourceBuilder.create().build(); 
    } 
    @Bean(name = "adminManager") 
    public EntityManagerFactory entityManagerFactory() { 

     HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter(); 
     vendorAdapter.setGenerateDdl(true); 

     LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean(); 
     factory.setJpaVendorAdapter(vendorAdapter); 
     factory.setPackagesToScan("pl.lodz.p.entities"); 
     factory.setDataSource(dataSource()); 
     factory.afterPropertiesSet(); 

     return factory.getObject(); 
    } 

    @Bean 
    public JpaTransactionManager transactionManager() { 
     JpaTransactionManager txManager = new JpaTransactionManager(); 
     txManager.setEntityManagerFactory(entityManagerFactory()); 
     return txManager; 
    } 
} 

サービス:

@Service 
@ComponentScan(basePackages = {"pl.lodz.p.admin.service"}) 
@Transactional(rollbackFor = AccountException.class, propagation = Propagation.REQUIRES_NEW) 
public class AccountServiceImpl implements AccountService { 

    @Autowired 
    AccountRepository accountRepository; 

    @Override 
    public void deleteAccountByLogin(String login) { 
     Account account = accountRepository.findByLogin(login); 
     accountRepository.delete(account); 
    } 
} 

とリポジトリ。私のEntityManager構成で

、私は

@Bean(name = "adminTransactionManager") 

そして、私のAccountServiceImplでを追加しました:

@Transactional(value = "adminTransactionManager", rollbackFor = AccountException.class, propagation = Propagation.REQUIRES_NEW) 
public class AccountServiceImpl implements AccountService { 

感謝。