1

下面是我正在使用的 JPA 设置。我可以按预期删除对象,但是我需要提供整个对象。虽然我不介意这样做,但我认为这不是最佳做法。有没有一种类似于 findByProductId(int productsId) 函数的方法,可用于删除属于 JPA 的本机部分的产品?

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

1 回答 1

3

如我所见,您的ProductsManager扩展JpaRepository(我猜是来自 Spring Data JPA 的扩展),因此它继承了一个接收 id 的删除方法(在 中声明CrudRepository):

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

只需在您的 DAO 接口中公开该方法即可。

于 2013-02-26T14:58:52.627 回答