1

以下は、私が使用しているJPAセットアップです。期待どおりにオブジェクトを削除できますが、オブジェクト全体を提供する必要があります。私はこれを行うことを気にしませんが、それがベストプラクティスであるとは思いません。JPA のネイティブ部分である製品を削除するために使用できる findByProductId(int productsId) 関数に似た方法はありますか?

ダオ

 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 に答える