2016-12-15 106 views
0

我無法處理entityManager.remove()函數。
當我嘗試刪除對象時,我沒有任何錯誤和異常,但記錄仍在數據庫中。Spring JPA:entityManager刪除不起作用

這裏是我的EntityManager定義:

@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); 
    } 
} 

和資源庫:

@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

最後,我已經解決了我的問題。

在我的EntityManager配置,我已經添加

@Bean(name = "adminTransactionManager") 

在我AccountServiceImpl:

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

感謝。