为了简单起见,我从下面的代码中省略了许多细节 我的实施是对的吗? 这种实施方式有任何缺点吗? 是否有更好的方法来实现相同的?
MyAction.java
class MyAction {
public String execute() {
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
try {
UserLoginDAO uldao = new UserLoginDAOImpl();
uldao.firstMethod(session);
List l = uldao.secondMethod(session);
tx.commit();
} catch(HibernateException ex) {
if(tx != null) tx.rollback();
} finally {
session.close();
}
//statements
}
}
UserLoginDAOImpl.java
class UserLoginDAOImpl implements UserLoginDAO{
public void firstMethod(session) {
//statements
session.save(something);
}
public List secondMethod(session) {
//statements
List lst = session.createQuery("something").list();
//statements
}
}
UserLoginDAO.java
interface UserLoginDAO {
public void firstMethod(session);
public List secondMethod(session);
}
答案 0 :(得分:1)
我的实施是否正确?
这是偏离主题的。顺便说一下,这似乎很好。
这种实施是否有任何缺点?
此实现称为Open Session In View(OSIV)模式,通常称为 Anti -Pattern。
有没有更好的方法来实现相同的?
更好是主观的,因此说哪个比其他主要基于意见更好。
离开"更好"除了回答"还有其他处理事务的方法":来自JAVA EE 6,事情发生了变化......如果你正在使用它,那么使用Hibernate作为JPA2实现(而不是作为原始的Hibernate并查看EJB3.1(或带有Interceptor的CDI)中的EntityManager和容器管理事务。