如何获取sessionfactory
Session:是应用程序与数据库之间的一个会话,是Hibernate运作的中心,持久层操作的基础。对象的生命周期、事务的管理、数据库的存取都与Session息息相关.
Session对象是通过SessionFactory构建的,Hibernate有两种获取session的方式
1、getCurrentSession()获得与当前线程绑定的session
package com.deptsystem.util;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
/**
* Hibernate的帮助类,用来获取Session
*
*/
public class HibernateUtil {
//将sessionFactory设为静态,可以保证其整个应用程序中的唯一性
private static final SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
private HibernateUtil(){}; //将构造方法设为似有,只能使用“类名+静态方法”的方式调用
/**
* 获取Session工厂
* @return SessionFactory
*/
public static SessionFactory getSessionFactory(){
return sessionFactory;
}
/**
* 获取Session
* @return Session
*/
public static Session getSession(){
return sessionFactory.getCurrentSession();
}
测试类部分代码:
public static void main(String[] args) {
Session session = HibernateUtil.getSession();//获取session
session.beginTransaction();//开始事务
User user = (User) session.get(User.class, 1);
System.out.println(user.getName());
session.getTransaction().commit();//事务提交
session.close();
}
2、openSession()打开一个新session
package com.deptsystem.util;
import org.hibernate.Session;//hibernate3的
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
/**
* Hibernate的帮助类,用来获取Session
*
*/
public class HibernateUtils {
private static SessionFactory factory;
static{
try{
//读取hibernate.cfg.xml文件
Configuration cfg=new Configuration().configure();
//建立SessionFactory
factory=cfg.buildSessionFactory();
}catch(Exception e){
e.printStackTrace();
}
}
//获得开启着的Session
public static Session getSession(){
return factory.openSession();
}
//关闭Session
public static void closeSession(Session session){
if(session!=null){
if(session.isOpen()){
session.close();
}
}
}
public static SessionFactory getSessionFactory(){
return factory;
}
}测试类部分代码:
public static void main(String[] args) {
Session session = HibernateUtil.getSession();//获取session
session.beginTransaction();//开始事务
User user = (User) session.get(User.class, 1);
System.out.println(user.getName());
session.getTransaction().commit();//事务提交
session.close();
}
3、使用注意事项
1)openSession和getCurrentSession的区别
openSession必须关闭,currentSession在事务结束后自动关闭
openSession没有和当前线程绑定,currentSession和当前线程绑定
2)如果使用currentSession需要在hibernate.cfg.xml文件中进行配置:
a、如果是本地事务(jdbc事务)
thread
b、如果是全局事务(jta事务)
jta
全局事务:资源管理器管理和协调的事务,可以跨越多个数据库和进程。资源管理器一般使用XA 二阶段提交协议与“企业信息系统”(EIS) 或数据库进行交互。
本地事务:在单个 EIS或数据库的本地并且限制在单个进程内的事务。本地事务不涉及多个数据来源。
Error creating bean with name 'sessionFactory' defined in class path resource ,是少包,还是冲突?
原因在action类的方法以外调用了其他自定义类的方法来给本类的变量赋值,所以在生成action的bean对象时这两个变量始终都是null,就无法创建bean。也有可能是配置文件有问题和确少getter,setter方法。注意在action类的方法以外不能调用其他自定义类的方法来给action的属性(变量)赋值,这样是无法给变量赋值的,会导致SSH整合的时候spring无法生成action的bean;
关于“零”的说法正确的是什么?
“零”的意思有9种解释,具体如下:1.零碎;小数目的(跟“整”相对):~用。~售。化整为~。2.零头;零数:挂~儿。年纪已经八十有~。3.放在两个数量中间,表示单位较高的量之下附有单位较低的量:一年~三天。八元~二分。4.数的空位,在数码中多作“○”:三~一号。二~~~年。5.表示没有数量:一减一等于~。这种药的效力等于~。6.某些量度的计算起点:~点。~下十摄氏度。7.姓。8.(草木花叶)枯萎而落下:~落。凋~。9.(雨、泪等)落下:涕~。读音:líng五笔输入:fwyc拼音输入:ling部首:雨部首笔画:8总笔画:13笔顺编号:1452444434454扩展资料相关组词:1.抹零[mǒ líng] 付钱时不计算整数之外的尾数。2.零落[líng luò] 花叶脱落:草木~。3.零点[líng diǎn] 时间词。夜里十二点钟:~十分。4.零工[líng gōng] 短工:打~。5.飘零[piāo líng] (花、叶等)坠落;飘落:秋叶~。雪花~。6.零碎[líng suì] 细碎;琐碎:~活儿。~东西。这些材料零零碎碎的,用处不大。7.零用[líng yòng] 零碎地花(钱);零碎地使用:一百块钱交书费,五十块钱~。8.奇零[jī líng] 也作畸零。整数以外的尾数。9.拆零[chāi líng] 把成套或成批的商品拆成零散的(出售):~供应。
Spring中你是怎么接收Action
在struts.xml中添加下面的句子,让spring来管理action
[html] view plain copy
下面看看applicationContext.xml中的action配置
[html] view plain copy
registAction"
class="org.arthur.lr.system.RegistAction">
然后看看怎么把这个在struts.xml中应用这个bean
[html] view plain copy
regist" class="registAction" >
/success.jsp
/regist.jsp
/regist.jsp
如果要用ajax技术发送到某个action,其中url也写成配置文件中的action名字即可
比如$.post(“regist”, {json: name}, callBack, "json");
hibernate session 需要关闭吗
1、getCurrentSession()与openSession()的区别?
* 采用getCurrentSession()创建的session会绑定到当前线程中,而采用openSession(),创建的session则不会
* 采用getCurrentSession()创建的session在commit或rollback时会自动关闭,而采用openSession(),创建的session必须手动关闭
2、使用getCurrentSession()需要在hibernate.cfg.xml文件中加入如下配置:
* 如果使用的是本地事务(jdbc事务)
thread
* 如果使用的是全局事务(jta事务)
jta
openSession() 与 getCurrentSession() 有何不同和关联呢?
在 SessionFactory 启动的时候, Hibernate 会根据配置创建相应的 CurrentSessionContext ,在getCurrentSession() 被调用的时候,实际被执行的方法是 CurrentSessionContext.currentSession() 。在currentSession() 执行时,如果当前 Session 为空, currentSession 会调用 SessionFactory 的 openSession 。所以 getCurrentSession() 对于 Java EE 来说是更好的获取 Session 的方法。
许多时候出现session is close();原因就是你在hibernate.cfg.xml里面设置了
thread
系统在commit();执行完之后就关闭了session,这时候你手动再关闭session就当然提示错误了
hibernate session 什么时候关闭
你好,getCurrentSession得到的session是和事务绑定的session,所以:
1,要用getCurrentSession生产的session,就必须有事务环境,意思就是你必须在调用session方法之前,session.beginTransaction();就算你只是get或者query
2,在事务提交之后,即session.getTransaction().commit()之后,session自动关闭,所以你用getCurrentSession,只需要commit事务,不要去调用session.close()
3,你用的是ssh,spring为
hibernate
的current_session_context_class配置了一个SpringSessionContext来帮你管理getCurrentSession中的session,所以,你在OpenSessionInview的时候,spring就自动的帮你打开了session——>你在执行用AOP包装的事务的时候,事务就开启了——>执行你的业务方法——>提交事务(注意,hibernate管理的getCurrentSession在提交事务的时候才会关闭session,而spring提供的这个SpringSessionContext不会)——>opensessioninview关闭session。
从上面的执行流程可以看出,你在SSH集成的时候,如果用的是getCurrentSession的集成方式,就不能设置hibernate的current_session_context_class为thread,而应该空着,让spring帮你。
Hibernate会话工厂类的作用是什么
SessionFactory:1,用于管理Hibernate会话(session)的对象,所以,最最最简单的理解,你可以把sessionFactory想想成里面有一个DataSource;2,这个对象创建了,hibernate才真正和数据库连接上了。即SessionFactory维护着所有连接对象已经连接对象的分配和销毁;3,SessionFactory是线程安全的,并且创建和销毁需要消耗比较大的资源,所以整个应用里面针对一个数据库只需要一个SessionFactory即可;4,SessionFactory管理着配置在其中的映射对象的解析数据,动作监听器,NamedQuery等大量信息;5,SessionFactory里面有一个二级缓存,可以提供更大生命周期的缓存策略;6,SessionFactory还有很多其他的功能就不一一列举了;
出现java.lang.IllegalArgumentException问题的解决方法?
错误:java.lang.IllegalArgumentException非法论据异常,也可称为非法形参异常。argument不是参数的意思,是争吵,争论;论据,经常用args用作形参。在SSM动态javaweb服务器框架中,经常看到这个异常,很多人说这是参数异常,检查自己在ioc容器中配置的参数是否正确,其实这是项目使用的Java编译器(即Javacompiler)使用的jdk版本和Java的运行环境(即jreJavaruntimeenvironment)版本不匹配造成的。如果jdk使用的是1.7,jre使用的是1.8,就会出现这一异常。即使是低版本的编译器,高版本的运行环境,也会出现这一异常。解决方法如下:第一:修改Java compiler和jre1、在eclipse-window-preference-java的里面的installed JREs和Compiler2、Compiler就是修改编译器的Installed JREs就是改变运行环境。按道理说只要jre的版本高于jdk(即Compiler)的版本,就能运行,因为高版本环境兼容低版本程序。但并不是的,jdk1.8的修改很大,就算前高后低,仍旧派出这个异常。所以我们都把他们修改成1.7版本。Compiler改成1.7。按下图改成1.7,然后右下角apply就行了。3、修改jre为1.7,看下图,电脑里装了三个jdk版本,选择jdk1.7,然后spply就行了。第二:修改tomcat服务容器的JRE1、因为tomcat是基于java编写的服务容器,所以它是需要java运行环境的。其实这个更容易开发人员忽略,但是这个更重要,因为动态web工程最终是在tomcat里面运行的,而tomcat的运行jre直接决定web工程的jre,而上面配置的就直接没用了,因为用到tomcat了,是web工程,不是纯java工程。修改tomcat的jre,window-Preferences-Server-Runtime Environments ,电脑里装了两个tomcat容器一个7,一个9,选择一个然后Edit。2、Edit就是配置的意思,及配置这个选中的tomcat。下面就是配置界面,选择jdk1.7,然后Finish就就ok了。这样,java.lang.IllegalArgumentException问题就得到了成功解决。
Java. lang. IllegalArgumentException什么意思?
错误:java.lang.IllegalArgumentException非法论据异常,也可称为非法形参异常。argument不是参数的意思,是争吵,争论;论据,经常用args用作形参。在SSM动态javaweb服务器框架中,经常看到这个异常,很多人说这是参数异常,检查自己在ioc容器中配置的参数是否正确,其实这是项目使用的Java编译器(即Javacompiler)使用的jdk版本和Java的运行环境(即jreJavaruntimeenvironment)版本不匹配造成的。如果jdk使用的是1.7,jre使用的是1.8,就会出现这一异常。即使是低版本的编译器,高版本的运行环境,也会出现这一异常。解决方法如下:第一:修改Java compiler和jre1、在eclipse-window-preference-java的里面的installed JREs和Compiler2、Compiler就是修改编译器的Installed JREs就是改变运行环境。按道理说只要jre的版本高于jdk(即Compiler)的版本,就能运行,因为高版本环境兼容低版本程序。但并不是的,jdk1.8的修改很大,就算前高后低,仍旧派出这个异常。所以我们都把他们修改成1.7版本。Compiler改成1.7。按下图改成1.7,然后右下角apply就行了。3、修改jre为1.7,看下图,电脑里装了三个jdk版本,选择jdk1.7,然后spply就行了。第二:修改tomcat服务容器的JRE1、因为tomcat是基于java编写的服务容器,所以它是需要java运行环境的。其实这个更容易开发人员忽略,但是这个更重要,因为动态web工程最终是在tomcat里面运行的,而tomcat的运行jre直接决定web工程的jre,而上面配置的就直接没用了,因为用到tomcat了,是web工程,不是纯java工程。修改tomcat的jre,window-Preferences-Server-Runtime Environments ,电脑里装了两个tomcat容器一个7,一个9,选择一个然后Edit。2、Edit就是配置的意思,及配置这个选中的tomcat。下面就是配置界面,选择jdk1.7,然后Finish就就ok了。这样,java.lang.IllegalArgumentException问题就得到了成功解决。