Hibernate代码......有些困惑

时间:2011-09-04 04:09:51

标签: java hibernate design-patterns

    Session session = HibernateUtil.getSessionFactory().openSession();
    Transaction transaction = null;
    try {
        transaction = session.beginTransaction();
        Consultants consultants = new Consultants();  // 1
        consultants.setUsername("Rahul");             // 2     
        consultants.setPass("rahul");                 // 3
        session.save(consultants);                     
        transaction.commit();
    } catch (HibernateException e) {
        System.out.println("Exception:"+e.getMessage());
        transaction.rollback();
        e.printStackTrace();
    } finally {
        session.close();
    }

请参阅上面的代码,除了1,2和3语句之外,所有代码对于每种方法都保持相同。有没有什么最好的方法可以重复编写上面的代码,即一次又一次地使用相同的代码?

谢谢!

4 个答案:

答案 0 :(得分:3)

不确定您抱怨什么样的重复,但您可以创建一个“通用”方法来保存任何映射的实体:

public void save(Object entity) {

    Session session = HibernateUtil.getSessionFactory().openSession();
    Transaction transaction = null;
    try {
        transaction = session.beginTransaction();
        session.save(entity);                     
        transaction.commit();
    } catch (HibernateException e) {
        System.out.println("Exception:"+e.getMessage());
        transaction.rollback();
        e.printStackTrace();
    } finally {
        session.close();
    }
}

然后在您想要保存顾问时使用此方法:

    Consultants consultants = new Consultants();
    consultants.setUsername("Rahul");
    consultants.setPass("rahul");

    save(consultants);

亲切的问候,

答案 1 :(得分:2)

是的,非常肯定。您已确定的是应用template method pattern的机会。例如,参见Spring的TransactionTemplate。即使您不想使用Spring - 如果您正在使用Hibernate,您也应该使用Spring管理它 - 您可以使用look at the source来查看它是如何完成的。

答案 2 :(得分:0)

通过所有代码表示事务处理和回滚机制? 我真正的单词应用程序一般交易被视为另一层,我们通常将其称为关注分离。

如果您使用的是Spring,那么您所要做的就是使用AOP将事务处理移到Java代码之外。 没有Spring,还有其他方法来处理事务管理

这是指向事务管理的spring文档的链接 transaction management

答案 3 :(得分:0)

  

transaction = session.beginTransaction();           session.save(实体);
          器transaction.commit();

为了避免在所有与持久性相关的方法中出现上述重复,您必须通过HibernateTemplate or JpaTemplate为我们处理上述重复。对于保存操作,您只需调用save(object)它就会将您的数据保存到持久性中,而不必担心它的实现。