gpt4 book ai didi

java - 正确使用session(hibernate)

转载 作者:行者123 更新时间:2023-12-01 22:22:55 25 4
gpt4 key购买 nike

抱歉我的英语不好。我学习JavaEE,但我不知道我在 hibernate 中使用 session 是否正确。如何使用它们?我使用模式 DAOhibernate。告诉我如何使用属性 session

这是HibernateUtil

private static final SessionFactory sessionFactory;

static {
try{
sessionFactory = new Configuration().configure("/app/web/landingpage/HibernateConnect/hibernate.cfg.xml").buildSessionFactory();
}catch(Throwable ex) {
System.out.println("Error " + ex);
throw new ExceptionInInitializerError(ex);
}
}

public static SessionFactory getSessionFactory() {
return sessionFactory;
}

public static void close(Session session) {
if (session != null) {
try {
session.close();
} catch (HibernateException ignored) {
System.out.print("Couldn't close Session" + ignored);
}
}
}

该类使所有操作数据库 CategoryDaoImpl

    public class CategoryDaoImpl implements CategoryDao{
private Session session = null;
//get all category
public Collection getAllCategory() {
List categoris = new ArrayList<Category>();
try{
session = HibernateUtil.getSessionFactory().openSession();
categoris = session.createCriteria(Category.class).list();
}catch(Exception e) {
System.out.println("getAllCategory "+ e);
}finally{
if(session != null && session.isOpen())
session.close();
}


return categoris;
}
//get category id
public Category getCategory(int id) {

Category cat = null;
try {
session = HibernateUtil.getSessionFactory().openSession();
cat = (Category) session.load(Category.class, id);
}catch(Exception e) {
System.out.println("getAllCategory "+ e);
}finally{
if(session != null && session.isOpen())
session.close();
}
return cat;
}

//and below few methods that use it the some way session
}

这个servlet获取结果indexuser

Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();

try{
Collection allcategory = Factory.getInstance().getCatDAO().getAllCategory();
request.setAttribute("allcategory", allcategory);
request.getRequestDispatcher("/index.jsp").forward(request, response);
} catch(Exception e) {
System.out.println(e);
} finally{
if(session!=null && session.isOpen())
session.close();
}

最佳答案

这里的主要契约是 session 实例的创建。通常,应用程序有一个 SessionFactory 实例,并且为客户端请求提供服务的线程从该工厂获取 Session 实例。

SessionFactory 的内部状态是不可变的。一旦它被创建,这个内部状态就被设置了。此内部状态包括有关对象/关系映射的所有元数据。

session 基本上用于与数据库建立物理连接。因此,当您执行任何数据库操作时,它将首先使用 sessionFactory 打开 Session,然后 Session 与数据库进行物理连接,然后执行您的操作,执行操作后您可以关闭它。

session 是轻量级的。

关于java - 正确使用session(hibernate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29366578/

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