J2EE企业应用实战——基于Hibernate3.0实现DAO

问题描述

Person类:public class Person {private int id;private String name;private Date born;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Date getBorn() {return born;}public void setBorn(Date born) {this.born = born;}}Person的配置文件:<class name="Person"><id name="id"><generator class="increment"></generator></id><property name="name"></property><property name="born" type="date"></property></class>PersonDao接口:public interface PersonDao{public Person get(int id);}PersonDaoImpl实现类:public class PersonDaoImpl implements PersonDao{private SessionFactory sessionFactory;public void setSessionFactory(SessionFactory sessionFactory) {this.sessionFactory = sessionFactory;}@Overridepublic Person get(int id) {return (Person) this.sessionFactory.getCurrentSession().load(Person.class, id);}}beanx.xml文件: <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName"> <value>oracle.jdbc.driver.OracleDriver</value> </property> <property name="url"> <value>jdbc:oracle:thin:@127.0.0.1:1521:myoracle</value> </property> <property name="username"> <value>xiaoming</value> </property> <property name="password"> <value>m123</value> </property> </bean> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="dataSource"> <ref local="dataSource"/> </property> <property name="mappingResources"> <list> <value>com/sunyan/bean/Person.hbm.xml</value> </list> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">org.hibernate.dialect.Oracle9Dialect</prop> <!-- <prop key="hibernate.hbm2ddl.auto">create</prop> --> </props> </property> </bean> <bean id="personDaoImpl" class="com.sunyan.impl.PersonDaoImpl"> <property name="sessionFactory"> <ref bean="sessionFactory"/> </property> </bean>测试代码:FileSystemXmlApplicationContext appContext = new FileSystemXmlApplicationContext(new String[]{"classpath:beans.xml"});BeanFactory factory = (BeanFactory) appContext;PersonDao pdi = (PersonDao) factory.getBean("personDaoImpl");Person p = (Person) pdi.get(77);System.out.println(p.getBorn()+" "+p.getName());出错提示:No Hibernate Session bound to thread, and configuration does not allow creation of non-transactional one here 问题补充:Wind_ZhongGang 写道

解决方案

有一点我不明白,你的Dao为什么不直接继承HibernateDaoSupport而是向Dao中注入SessionFactory。如果你同时也使用了Spring框架,那么你可以在配置文件中声明事务,就像这样。<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory"/> </bean> <bean id="transactionTemplate" class="org.springframework.transaction.support.TransactionTemplate"> <property name="transactionManager" ref="transactionManager"/> </bean> <tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="*" propagation="REQUIRED"/> </tx:attributes> </tx:advice> <aop:config> <aop:pointcut id="service" expression="execution(* com.hibernate..*.*(..))"/> <aop:advisor advice-ref="txAdvice" pointcut-ref="service"/> </aop:config>如果不是那你就得实现编程式的事务处理,有这样几个类可以去看看,TranactionManager,TransactionTemplate,这些提供了事务支持。
解决方案二:
没有事务包围,你得加上事务。

时间: 2024-08-07 17:15:59

J2EE企业应用实战——基于Hibernate3.0实现DAO的相关文章

jsf-有没有《经典Java EE企业应用实战》的光盘内容?

问题描述 有没有<经典Java EE企业应用实战>的光盘内容? 有没有<经典Java EE企业应用实战--基于WebLogic/JBoss的JSF+EJB 3+JPA整合开发> 的光盘内容? 解决方案 http://down.51cto.com/data/1150461 解决方案二: http://vdisk.weibo.com/s/uamgkixENqRy3

Snort企业部署实战

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://chenguang.blog.51cto.com/350944/969641 Snort企业部署实战 1 背景       我们知道企业网络目前威胁来自两个位置:一个是内部,一个是外部.来自外部的威胁都能被防火墙所阻止,但内部攻击都不好防范.因为公司内部人员对系统了解很深且有合法访问权限,所以内部攻击更容易成功.IDS为信息提供保护,已经成为深度防御策略中的重要部分.IDS与现实

如何把Hibernate2.1升级到Hibernate3.0

尽管Hibernate 3.0 与Hibernate2.1的源代码是不兼容的,但是当Hibernate开发小组在设计Hibernate3.0时,为简化升级Hibernate版本作了周到的考虑. 对于现有的基于Hibernate2.1的Java项目,可以很方便的把它升级到Hibernate3.0. 本文描述了Hibernate3.0版本的新变化,Hibernate3.0版本的变化包括三个方面: (1)API的变化,它将影响到Java程序代码. (2)元数据,它将影响到对象-关系映射文件. (3)H

编译可在Nexus5上运行的CyanogenMod13.0 ROM(基于Android6.0)

编译可在Nexus5上运行的CyanogenMod13.0 ROM (基于Android6.0) 作者:寻禹@阿里聚安全 前言 下文中无特殊说明时CM代表CyanogenMod的缩写. 下文中说的"设备"均指Android设备. proprietary-blobs.txt文件的路径:device/lge/hammerhead/proprietary-blobs.txt 参考资料 How To Build CyanogenMod For Google Nexus 5 ("ham

企业人事信息管理系统1.0

信息管理 企业人事信息管理系统1.0本系统为bs架构的asp+access版本.包含:员工信息,考勤,工资等模块.您可以根据自己企业的情况设置部门,职位等内容.可以根据考勤与工资设定自动统计工资. 安装前请确认下列问题:1.如果您的系统是英文操作系统,请把你的区域设置为中国2.本系统在ie5.5上测试通过,因此,请将浏览器升级为ie5.5,以免出现不兼容的问题. 安装本系统1.请确认您已经安装IIS(2000或xp)或者PWS(win98)2.设置虚拟目录并将本系统所有文件拷贝至虚拟目录.3.本

c++-C++如何开发基于web2.0的在线会议白板程序?

问题描述 C++如何开发基于web2.0的在线会议白板程序? C++如何开发基于web2.0的在线会议白板程序?需要用mfc编程技术么?socket是什么意思? 解决方案 http://wenku.baidu.com/link?url=O42MGvnXzbNlEH36ATCSqwbmmFYBFv0eXiOG7SjgIguLrVbQNltK_MJCUhJonvHKTEzvAH7ZpGZKaQk2PtGedufYDcXfwBmqdhQwY0HWT83

HEVC Study Two(基于HM14.0平台)--如何在HEVC中加入背景建模技术(一)

随着AVS的逐步发展,AVS中的一些创新也得到国际上越来越多学者的关注.尤其是AVS中针对监控视频编码的背景建模技术和感兴趣区域提取技术.对于国际同行来说,如何在HEVC的参考软件平台HM上加入这两项技术是一个工作量甚大的事情.本文就本人做的一些工作做简单介绍. 软件平台HM14.0,IDE:VS2010(英文版) 废话了这么多,下面开始真正的内容: 在<HEVC framework before starting encoding(基于HM14.0平台)>中(网址:点击打开链接)讲述了进入编

vs2012-VS2012新建MFC项目时可以选择framework版本,但是无论选什么新建完成后依旧是基于4.0

问题描述 VS2012新建MFC项目时可以选择framework版本,但是无论选什么新建完成后依旧是基于4.0 VS2012新建MFC项目时可以选择framework版本,但是无论选什么新建完成后依旧是基于4.0 另外,我的电脑是win8的 解决方案 Mfc没什么选择的,framework针对的是c#工程

Swift项目开发实战-基于分层架构的多版本iPhone计算器-直播公开课

Swift项目开发实战-基于分层架构的多版本iPhone计算器-直播公开课 本课程采用QQ群直播方式进行直播,价值99元视频课程免费直播.完整的基于Swift项目实战,手把手教你做一个Swift版iPhone计算器.(直播过程也有惊喜!)直播QQ群:362298485(直播时点击群视频即可进入直播课堂)直播时间:8月26日(周二),9月2日(周四),每天20:00-22:00欢迎咨询客服QQ:1575716557直播后希望继续深入学习了解本课程可在51CTO学院购买本课程,定价99元.购买课程更