SessionFactory的创建和Session的获得

1。当我们调用

<wbr><wbr> Configuration config=new Configuration().configure();</wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr> 时候Hibernate会自动在当前的CLASSPATH中搜寻hibernate.cfg.xml文件并将其读取到内存作为后继操作的基础配置。</wbr></wbr></wbr></wbr></wbr></wbr>

<wbr></wbr>

<wbr>我们也可以指定配置文件名,如果不希望使用默认的hibernate.cfg.xml文件作为配置文件的话:</wbr>

<wbr><wbr><wbr></wbr></wbr></wbr>

SessionFactory

<wbr><wbr><wbr><wbr> SessionFactory 负责创建Session的实例。我们可以通过Configuation实例创建SessionFactory;</wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr> Configuration config=new Configuration().configure();</wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr> SessionFactory sessionFactory=config.buildSessionFactory();</wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr></wbr>

Configuration 实例config 会根据当前的配置信息,构造SessionFactory实例并返回。SessionFactory一旦构建完毕,即被赋予特定的配置信息。也就是说,之后config的任何变更将不会影响到已经创建的SessionFactory实例(SessionFactory)。如果需要使用基于改动后的config实例的SessionFactory,需要从config重新构建一个SessionFactory实例。

<wbr></wbr>

Session

<wbr><wbr> Session 是持久层操作的基础,相当于JDBC中的Connnection。</wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> Configuration config=new Configuration().configure();<wbr> //读取默认的hibernate.cfg.xml的文件</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> SessionFactory sessionFactory=config.buildSessionFactory();<wbr> //通过config创建sessionFactory的实例</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> Session session=sessionFactory.openSession();<wbr><wbr><wbr><wbr><wbr><wbr> //获得session</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

之后,我们就可以调用Session所提供的save,find,flush等方法完成持久化操作:

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> 看例Save:</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr> TUser user=new TUser();</wbr></wbr>

<wbr><wbr> user.setName("yuanliang");</wbr></wbr>

<wbr><wbr> session.save(user);</wbr></wbr>

<wbr><wbr> session.flush();//Session.flush方法强制数据库同步,这里既强制Hibernate将user实例立即同步到数据库中。在事物提交的时候和Session关闭的时候,也会自动执行flush方法 </wbr></wbr>

<wbr><wbr></wbr></wbr>

<wbr></wbr>

find()//这个方法返回一个List

<wbr><wbr> List list=Session.find(From TUser as tu order by tu.name asc);</wbr></wbr>

Load() //这个方法返回是一个对象

<wbr><wbr> Customer c=(Customer)session.load(Customer.class,customer_id);</wbr></wbr>

<wbr></wbr>

修改数据:

1. 将要修改的数据从数据库读出,赋值给表对应的持久化类

<wbr>Query query = session.createQuery("from User as u where list = query.list();<br><wbr>User usr = (User)list.get(0);</wbr></wbr>

2. 对得到的持久化对象进行修改
<wbr>usr.setUsername("Look");<br> 3. 启动事务管理<br><wbr><wbr> Transaction ts = session.beginTransaction();</wbr></wbr></wbr>

4. 将赋值后的持久化对象提交给session
<wbr><wbr><br><wbr>session.save(usr);<br> 5. 结束事务管理并向数据库提交<br><wbr>ts.commit();</wbr></wbr></wbr></wbr>

-------------------------------
public void update(){
<wbr><wbr><br><wbr><wbr>Integer Integer(2);<br><wbr><wbr>Transaction ts = null;<br><wbr><wbr>try {<br><wbr><wbr><wbr>Session session = HibernateSessionFactory.currentSession();<br><wbr><wbr><wbr><br><wbr><wbr><wbr>Query query = session.createQuery("from User as u where list = query.list();<br><wbr><wbr><wbr>User usr = (User)list.get(0);<br><wbr><wbr><wbr>usr.setUsername("Look");<br><wbr><wbr><wbr><br><wbr><wbr><wbr>ts = session.beginTransaction();<br><wbr><wbr><wbr>session.save(usr);<br><wbr><wbr><wbr><br><wbr><wbr><wbr>ts.commit();<br><wbr><wbr><wbr><br><wbr><wbr>} catch (HibernateException e) {<br><wbr><wbr><wbr>// TODO Auto-generated catch block<br><wbr><wbr><wbr>e.printStackTrace();<br><wbr><wbr><wbr>try {<br><wbr><wbr><wbr><wbr>ts.rollback();<br><wbr><wbr><wbr>} catch (HibernateException e1) {<br><wbr><wbr><wbr><wbr>// TODO Auto-generated catch block<br><wbr><wbr><wbr><wbr>e1.printStackTrace();<br><wbr><wbr><wbr>}<br><wbr><wbr>}<br><wbr>}</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 根据给出的错误信息,可以看出这是一个MyEclipse发生的严重错误。错误消息中提到了"action: null"和"sessionfactory java.lang.exceptionininitialize",这暗示着可能存在以下几个问题。 首先,"action: null"表示可能在某些地方使用了一个空的或未初始化的操作对象。这会导致在执行操作时发生错误,从而导致程序无法正常运行。需要检查代码中是否有使用操作对象前未给其赋值或初始化的情况。 另外,"sessionfactory java.lang.exceptionininitialize"表明存在无法初始化的Session工厂。SessionFactory通常用于在Java应用程序中管理与数据库的连接,并负责创建和管理会话。异常发生在初始化Session工厂时,可能是因为数据库连接配置有误、数据库驱动不匹配或者其他原因导致的。 为了解决这个问题,可以尝试以下方法: 1.检查代码中是否存在使用操作对象前未初始化的情况,确保已正确初始化操作对象。 2.检查数据库连接配置是否正确,包括数据库地址、用户名、密码等。 3.确认所使用的数据库驱动版本是否与代码或配置中的要求匹配,并将其进行更新。 4.查找MyEclipse的日志文件,以获得更详细的错误信息和堆栈跟踪,进一步定位问题。 5.考虑重建项目或重新导入项目,以确保项目文件不损坏。 总的来说,由于提供的信息有限,这只是一个可能的分析和解决方案。如果问题仍然存在,建议查阅相关文档、搜索相关错误信息,或向MyEclipse的支持团队寻求帮助。 ### 回答2: 这个错误提示来自于MyEclipse中的异常信息,说明在初始化SessionFactory时发生了一个严重的问题。SessionFactory是Hibernate框架中的一个核心组件,它负责管理数据库连接、缓存、事务等操作。 这个错误的原因可能有很多种,常见的原因包括配置错误、依赖缺失等。首先,我们需要检查Hibernate配置文件(通常是hibernate.cfg.xml),确认数据库连接、映射关系等配置是否正确。如果配置文件有问题,可以检查并修复相应的错误。 此外,还需要检查类路径中是否包含了Hibernate所需的jar文件,包括Hibernate核心包和数据库驱动程序。如果缺少必要的jar文件,可以通过将它们添加到项目的构建路径中来解决。 另外,如果在项目中使用了Spring等其他框架,还需要检查相应的配置文件是否正确,并确保所需的依赖项已正确配置。 如果以上方法均无效,可以尝试重新创建SessionFactory对象,或者查找并修复其他可能的问题。如果问题仍然存在,建议查看MyEclipse的日志文件,以获取更详细的错误信息,从而帮助定位和解决问题。 总之,MyEclipse抛出的这个异常表明在初始化SessionFactory时发生了一个严重的错误,我们需要仔细检查并排除可能出现的各种问题,才能解决这个问题。 ### 回答3: 这个错误信息是由于MyEclipse在初始化SessionFactory时发生了异常。SessionFactory是Hibernate框架中用于创建Session对象的工厂,一般会在应用程序启动时进行初始化。在初始化过程中,可能会涉及到许多配置文件、数据库连接等操作,一旦出现了异常,就会抛出这个错误信息。 要解决这个问题,首先要检查配置文件是否正确。可以检查hibernate.cfg.xml文件中的配置是否正确,特别是数据库连接的配置是否准确。还可以检查是否有其他的配置文件缺失或配置错误,比如映射文件等。 此外,还可以检查是否有依赖库缺失或版本不匹配的问题。MyEclipse集成了许多开发工具和框架,所以可能需要引入一些相关的依赖库。可以检查项目的构建路径和依赖库的版本,确保它们是正确的。 如果以上步骤都没有解决问题,可以尝试重新安装MyEclipse,可能是由于安装过程中的错误或配置问题导致的。重新安装可以清除可能存在的配置问题,并确保系统环境的正确性。 总之,这个错误信息是由MyEclipse在初始化SessionFactory时出现的异常所致。通过检查配置文件、依赖库以及重新安装MyEclipse等方式,可以解决这个问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值