使用 Hibernate 和 Repository Pattern 的多个类似 CRUD 方法?

Multiple similar CRUD methods with Hibernate and Repository Pattern?

使用存储库设计模式(我目前所了解的),您可以为每个业务模型创建一个存储库。所有这些存储库都实现了一个 IRepository 接口:

public interface IRepository<T> {
   boolean add(T item);
   boolean update(T item);
   boolean remove(T item);
   List<T> query(Specification specification);
}

使用 Hibernate,我以这种方式保存新记录:

try{
        tx = session.beginTransaction();
        session.save(mappedObject);
        tx.commit();
    }
    catch (HibernateException e) {

        if (tx!=null) tx.rollback();
        e.printStackTrace();
    }
    finally {
        session.close();
    }

不会每个存储库基本上都有重复的 add 方法吗?使用已经定义的添加方法等创建存储库 class 不是更好吗?

我建议您创建一个 AbstractRepository 实现来实现共享的常用方法的 IRepository 接口,然后从抽象 class 扩展您的业务存储库实现。

public abstract class AbstractRepository<T> implements IRepository<T> {
  @Override
  public T add(T object) {
    Session session = openSession();
    try {
      session.getTransaction().begin();
      session.save( object );
      session.getTransaction().commit();
      return object;
    }
    catch ( Exception e ) {
      if ( session.getTransaction().getStatus() == TransactionStatus.ACTIVE ) {
        session.getTransaction().rollback();
      }
      throw e;
    }
    finally {
      session.close();
    }
  }
}