好久没做SSH项目了,前几天项目组让我做一个网站,干脆用最新的SSH搭一个架子,采用strtus2.3+spring3.2+hibernate4.2+jquery+seaJS+mysql。
在搭架子的过程中也碰到一些问题,比如hibernate session的问题,H3和H4已经发生了很多改变,比如:
1、在hibernate4中,
AnnotationConfiguration已经过期。
对于注解配置,并没有新的类来替代它,而是将这部分功能放到Configuration类中来实现了。
Configuration cfg = new Configuration().configure();
上面的语句在hibernate4中即可解析注解配置。
2、buildSessionFactory()方法过期。
创建SessionFactory的正解方法如下:
Configuration cfg = new Configuration().configure();
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(cfg.getProperties()).buildServiceRegistry();
SessionFactory factory = cfg.buildSessionFactory(serviceRegistry);
3、与spring3整合
从spring3.1开始, 已经不提供Hibernate4的 HibernateDaoSupport和HibernateTemplate,而是直接使用原生的Hibernate4 API来获得session.
如管要在spring3中配置sessionFactory,或者管理事务,代码如下:
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
</bean>
<bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
注意,这里的包名为org.springframework.orm.hibernate4。
现在问题就出来了,我们知道hibernate的session常用的有两种方式获取,一种是openSession,一种是getCurrentSession,试了第一种(现在是使用的oracle数据库),结果是在新增数据的时候出问题了,open出来的session在一级缓存临时变量中有数据,发送了select语句查询主键,但是没有发送insert语句进行提交,查了资料发现网上说
* 采用getCurrentSession()创建的session会绑定到当前线程中,而采用openSession()
创建的session则不会;
* 采用getCurrentSession()创建的session在commit或rollback时会自动关闭,而采用openSession()创建的session必须手动关闭;
于是手动开启事务准备提交,结果报出了当前事务已存在的错误;说明当前线程中已经存在一个事务纳入了session的管理了,无奈之下,改为了getCurrentSession,于是成功发送insert语句,添加了数据。所以建议在hibernate4下推荐使用getCurrentSession,特别是在有声明式事务包围的方法上。
接着我又换了成了MYSQL数据库,发现openSession和getCurrentSession,在不手动开启事务的时候都能提交,很奇怪的现象,同样的代码,在不同数据库下出现了不同的结果,于是我想到了在默认情况下,不同数据库采用的事务隔离级别的问题,这只是我的一个猜想,看来只能在hibernate4的源码里去找答案了,也不知道方向对不对,希望大家也能给我一些建议。
分享到:
相关推荐
以下将详细介绍如何搭建SSH开发环境。 首先,确保你有以下开发工具和库: 1. **MyEclipse 5.5**:这是一个集成开发环境(IDE),提供了方便的Java和Web项目开发支持。 2. **JDK 1.6**:Java Development Kit,是...
ssh软件环境搭建
在这个最新的“最新版本ssh搭好的框架模板”中,我们将会探讨Spring 3、Hibernate 4和Struts2的核心功能和它们如何协同工作。 **Spring框架** Spring是一个全方位的轻量级应用框架,它提供了依赖注入(DI)和面向切...
SSH环境搭建 初学者可以参考学习,里面命名不规范的请见谅,只是为了面试复习一下........ SSH环境搭建 初学者可以参考学习,里面命名不规范的请见谅,只是为了面试复习一下........ SSH环境搭建 初学者可以参考...
ssh框架环境,虽然是很老的资源,很多人都不在用了,可以了解一下学习一下
这个环境的搭建涉及到多个组件的配置和整合,下面将详细讲解SSH环境的搭建过程及其核心知识点。 首先,Spring是SSH框架中的核心,它提供了依赖注入(DI)和面向切面编程(AOP)等功能,极大地简化了Java应用的开发。在...
当涉及到SSH与这些框架的结合使用时,例如在远程部署或维护Java Web应用时,可以使用SSH进行远程连接,通过SFTP(SSH文件传输协议)上传项目文件到服务器,或者使用SSH执行远程命令来启动、停止或重启应用服务器,如...
简单易懂的语言描述了ssh开发环境的搭建全过程,非常容易上手哦!
总的来说,"ssh环境搭建需要的jar包2"涉及的主要知识点包括:SSH协议、JSch库的使用、Java远程连接编程以及相关工具的使用。通过这些知识,你可以构建一个能够安全、高效地与远程服务器交互的Java应用程序。
【标题】"easyUI+SSH环境已经搭好"表示我们已经成功配置了一个集成easyUI前端框架和Spring、Struts2、Hibernate(SSH)后端框架的开发环境。这是一个常见的Java Web开发组合,常用于构建企业级应用。 【描述】中的...
ssh ssh shhs ssh ssh shhs ssh ssh shhs ssh ssh shhs ssh ssh shhs ssh ssh shhs ssh ssh shhs ssh ssh shhs ssh ssh shhs ssh ssh shhs ssh ssh shhs ssh ssh shhs ssh ssh shhs ssh ssh shhs ssh ssh shhs ssh ...
在Java环境中,SSH2通常指的是通过Java API实现的SSH2库,如JSch或Apache MINA,它们允许开发人员在应用程序中集成SSH连接功能。本文将详细介绍如何在Java项目中搭建SSH2环境,并利用相关的Jar包进行开发。 首先,...
在开发环境中,SSH可以与各种工具结合使用,例如: - `scp`用于安全地复制文件,如`scp local_file user@remote_host:remote_path`。 - `sshfs`允许将远程文件系统挂载到本地,便于操作,`sshfs user@remote_host...
1. **环境准备**:首先,确保系统已经更新到最新版本,安装必要的依赖。在大多数Linux发行版中,可以使用`apt-get`或`yum`来安装软件包。 2. **Jailkit安装**:Jailkit是一个用于创建和管理用户jails的工具。可以...
3. **配置SSH服务**: 配置文件位于`/etc/ssh/sshd_config`,修改后使用`sudo launchctl unload /System/Library/LaunchDaemons/ssh.plist`停止服务,再用`sudo launchctl load /System/Library/LaunchDaemons/ssh....
以下是关于SSH图书管理的一些关键知识点: 1. **SSH协议基础**:SSH是为了解决通过不安全网络传输数据时的安全问题而设计的。它提供了加密的数据传输,包括身份验证、会话管理和文件传输,确保了信息在传输过程中的...
在IT行业中,SSH(Spring、Struts2、Hibernate)是一个非常经典的Java Web开发框架组合,常用于构建企业级应用。SSH2是SSH框架的升级版本,加入了更多的特性以及对注解的支持,使得代码更加简洁、易维护。下面将详细...
### SSH开发环境搭建详解 SSH,即Struts2、Spring和Hibernate三者的组合,是Java Web开发中的一个经典框架组合,被广泛应用于企业级应用的开发。本文将详细阐述如何搭建SSH开发环境,并通过实际步骤指导,帮助读者...