gpt4 book ai didi

java - hibernate session 和 DAO 的最佳实践是什么

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:58:11 25 4
gpt4 key购买 nike

实际上,我正在寻找为 hibernate 4.2.x 使用 session 和 DAO 的最佳实践

第一种方法:

public class AccountDAOImpl implements AccountDAO {

Session session=HibernateSessionFactoryUtil.getSession();
Transaction transaction =null;
@Override
public void saveAccnt(Account account) {
// TODO Auto-generated method stub
try
{
transaction=session.beginTransaction();
session.save(account);

transaction.commit();

}
catch(RuntimeException re)
{
if(transaction!=null)
transaction.rollback();
throw re;
}
finally
{
session.close();
}

}
}

或者我们采用第二种方法:

public class AccountDAOImpl implements AccountDAO {

Session session=HibernateSessionFactoryUtil.getSession();
Transaction transaction =null;
@Override
public void saveAccnt(Account account) {
// TODO Auto-generated method stub
try
{
transaction=session.beginTransaction();
session.save(account);

transaction.commit();

}
catch(RuntimeException re)
{
if(transaction!=null)
transaction.rollback();
throw re;
}


}
}

close session的实际区别是每次需要执行DAO的时候都需要在工作完成的时候关闭session。

更新:

public class HibernateSessionFactoryUtil {

private static SessionFactory sessionFactory=null;
public static Session getSession() {

if(sessionFactory==null)
{
createSessionFactory();
}


return sessionFactory.openSession();
}


public static SessionFactory getSessionFactory() {
if(sessionFactory==null)
{
createSessionFactory();
}
return sessionFactory;
}


private static void createSessionFactory() {
Configuration configuration = new Configuration();
configuration.configure("/hibernate.cfg.xml");

ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
}

最佳答案

你不应该在你的方法中关闭 session :你没有在那里打开它。

执行您的第二种方法,或执行此操作:

public class AccountDAOImpl implements AccountDAO {

@Override
public void saveAccnt(Account account) {
Transaction transaction =null;
Session session=HibernateSessionFactoryUtil.getSession();
try
{
transaction=session.beginTransaction();
session.save(account);

transaction.commit();

}
catch(RuntimeException re)
{
if(transaction!=null)
transaction.rollback();
throw re;
}
finally
{
session.close();
}

}
}

关于java - hibernate session 和 DAO 的最佳实践是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31818278/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com