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语句之外,所有代码对于每种方法都保持相同。有没有什么最好的方法可以重复编写上面的代码,即一次又一次地使用相同的代码?
谢谢!
答案 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)
它就会将您的数据保存到持久性中,而不必担心它的实现。