如何根据ID而不是对象更改JPA / hibernate以进行删除

时间:2013-02-26 14:43:50

标签: hibernate jpa spring-data-jpa

以下是我正在使用的JPA设置。我能够按预期删除对象,但是我需要提供一个完整的对象。虽然我不介意这样做,但我觉得这不是最好的做法。有没有办法,类似于findByProductId(int productsId)函数,我可以用它来删除作为JPA原生部分的产品?

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

1 个答案:

答案 0 :(得分:3)

正如我所见,你的ProductsManager扩展了JpaRepository(我猜是Spring Data JPA中的那个),所以它继承了一个接收id的delete方法(在CrudRepository中声明):< / p>

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

只需在DAO界面中公开该方法。