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

时间:2017-02-15 16:36:50

标签: java database hibernate 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方法重复?那么用一个已定义的添加方法等制作一个Repository类会不会更好?

1 个答案:

答案 0 :(得分:1)

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

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