2013-02-26 62 views
1

下面是我正在使用的JPA設置。我能夠按預期刪除對象,但是我需要提供一個完整的對象。雖然我不介意這樣做,但我並不認爲這是最佳做法。有沒有類似於findByProductId(int productsId)函數的方法,我可以使用它來刪除JPA本地部分的產品?如何更改JPA /休眠刪除基於ID而不是對象

DAO

void delete(Products productToDelete); 

DAOimpl

@Transactional 
public void delete(Products productToDelete){ 
    productsManager.delete(productToDelete); 
} 

經理

@Resource 
@Transactional(readOnly = true) 
public interface ProductsManager extends JpaRepository<Products,Integer> { 
    Products findByProductId(int productsId); 
    List findAll(); 
} 

下面是測試

@Test 
public void delete() throws Exception{ 
    Products productToCreate = new Products(); 
    productToCreate.setProductName("Test Product"); 
    productsDao.createProduct(productToCreate); 
    List loaded = productsDao.findAll(); 
    System.out.println("Product: " + loaded); 
    assertNotNull(loaded); 
    productsDao.delete(productsDao.getProductsById(1)); 
    List loadedTwo = productsDao.findAll(); 
    System.out.println("Product After Del: " + loadedTwo); 
    assertEquals(loadedTwo.size(),0); 
} 

回答

3

依我之見,你ProductsManager擴展JpaRepository(我想從春天數據JPA的一個),所以它繼承了刪除方法接收ID(在CrudRepository聲明):

public interface CrudRepository<T, ID extends Serializable> extends Repository<T, ID> { 
    ... 
    void delete(ID id); 
    ... 
} 

只是這個方法公開在你的DAO接口。

+0

我會如何在我的DAO中公開? – zmanc 2013-02-26 17:30:05

+1

假設'Products'的id是'Long',可以在'DAO'接口添加一個'void delete(Long id)'方法,並通過調用'productsManager.delete(id);'DAOimpl'來實現。 ' – zagyi 2013-02-26 18:04:56

+0

非常感謝你。這工作如解釋。 – zmanc 2013-02-26 18:15:16