Hibernate的一些其他问题

    技术2022-05-19  19

    Session是非线程安全的,生命周期较短,代表一个和数据库的连接,在b/s系统中一般不会超过一个请求;内部维护一级缓存和数据库连接,如果session长时间打开,会长时间占用内存和数据库连接。SessionFactory是线程安全的,一个数据库对应一个SessionFactory,生命周期长,一般在整个系统生命周期内有效;SessionFactory保存着和数据库连接的相关信息(user,password,url)和映射信息,以及hibernate运行时要用到的一些信息其他问题:flush时将一级缓存与数据库同步,最好不要自己去调用,hibernate自己会调用大批量操作数据时可能造成内存溢出,解决办法如下1.清除session中的数据for(int i=0;i<100000;i++)session.save(obj);下面是解决办法for(int i=0;i<100000;i++){session.save(obj);if(iP==0){  session.flush();session.clear();}}}

     

    上面只是人工解决 每次都要判断,效率低。。。不建议用

    如何大批量的数据操作用StatelessSession代替Session

    2.用StatelessSession接口,它不和一级缓存,二级缓存交互,也不会触发任何事件,监听器,拦截器,通过该接口的操作会立刻发送给数据库,与JDBC的功能一样,StatelessSession s=sessionFactory.openStatelessSession();该接口的方法与Session类似。3.Query.executeUpate()执行批量更新,会清除相关联的类多的二级缓存(sessionFactory.evict(class)),也可能造成级联,和乐观锁定出现问题


    最新回复(0)