`

Hibernate4 annotation实例补充

阅读更多

使用hibernate最新版本:hibernate-release-4.2.5.Final

本文是对之前的hibernate4 annotation实例的补充说明

hibernate4配置文件头信息(不可缺省)为:

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

 

<property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>  

MySQL方言是:MySQL5Dialect不在是MySQLDialect(写MySQLDialect也不报错,也可以通过)

注意:获取SessionFactory新的方式(new Configuration().configure().buildSessionFactory()方法已过时

Configuration configuration = new Configuration();
configuration.configure();//默认在classpath下找hibernate.cfg.xml配置文件
//可指定路径
//configuration.configure("/db/hb.cfg.xml");//classpath下找db文件夹下的hb.cfg.xml
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
SessionFactory sessionFactory = configuration.buildSessionFactory(serviceRegistry);

 

 xml,annotation都可以通过上面方式

 annotation获取SessionFactory可通过指定注解的类获取,这样的好处就是不需要在hibernate.cfg.xml配置 <mapping>标签了

 sessionFactory = configuration.addAnnotatedClass(Teacher.class).buildSessionFactory.(serviceRegistry);

获取Session:

Session session = sessionFactory.getCurrentSession();//推荐使用

 

getCurrentSession()与openSession()的区别

1、getCurrentSession () 使用当前的session   openSession()     重新建立一个新的session
* 采用getCurrentSession()创建的session会绑定到当前线程中,而采用openSession()
创建的session则不会
* 采用getCurrentSession()创建的session在commit或rollback时会自动关闭,而采用openSession()
创建的session必须手动关闭
2、使用getCurrentSession()需要在hibernate.cfg.xml文件中加入如下配置:
* 如果使用的是本地事务(jdbc事务)
<property name="hibernate.current_session_context_class">thread</property>
* 如果使用的是全局事务(jta事务)java分布式事务管理(多数据库访问)

 jta由中间件提供(jboss WebLogic等,tomcat不支持)

<property name="hibernate.current_session_context_class">jta</property>

 

getCurrentSession()使用方法

Session session = sessionFactory.getCurrentSession();
  session.beginTransaction();  

  session.save(t);
  session.getTransaction().commit();

openSession()使用方法

Session session = sessionFactory.openSession();

 Transaction tx = session.beginTransaction(); 

 session.save(t);

  tx.commit(); 

  session.close();  

 

junit测试遇到的问题:创建SessionFactory初始化异常不提示,比如指定配置文件时写错文件名或者路径,junit不报错。

解决办法:使用try/catch

try {
	configuration.configure("/db/hb.cfg.xml");
} catch (HibernateException e) {
	// TODO Auto-generated catch block
	e.printStackTrace();
}

 

另一方法是使用main方法测试,个人感觉不好,不够专业,junit是专门的单元测试
分享到:
评论

相关推荐

    学习JPA——Hibernate_Annotation使用实例

    学习JPA——Hibernate_Annotation使用实例学习JPA——Hibernate_Annotation使用实例学习JPA——Hibernate_Annotation使用实例

    hibernate annotation

    hibernate annotation 实例

    JSF+Spring+Hibernate(Annotation)

    JSF+Spring+Hibernate(Annotation)的login小实例,建议入门的朋友看看,老鸟就免了,呵呵。环境:SQLSever2000+jdk5.0+spring2.0+hibernate3.2+jsf

    Hibernate的Annotation版Hello world实例

    主要介绍了Hibernate的Annotation版Hello world实现方法,详细分析了Annotation的具体使用步骤与Hello world实现方法,需要的朋友可以参考下

    springMVC+Hibernate3整合实例

    里面整合的是springMVC+hibernate3的配置文件和实例,用的是mysql数据库,使用注解annotation,下载后,只需修改jdbc.properties配置文件和加载对应的数据库驱动jar包就可以运行。亲测通过,有问题可以交流。

    Hibernate Annotation 学习笔记

    一步步hibernate annotation练习笔记, 实例操作,从经验中学习

    Struts2+Spring2.5+Hibernate3全注解实例详解

    超级详细的SSH2项目实例详解,并且附带两个项目详解。两种注解实现方式。不同的生成数据脚本实现。 在JavaEE企业级开发中,以SSH2框架为核心的应用非常广,大象根据项目实践经验,通过二个实例,详细的为大家讲解...

    spring3+hibernate4配置声明式事务管理(annotation方式)

    一个小实例工程,说的是spring3+hibernate4配置声明式事务管理(annotation方式)

    joeylv#joscrapy#Hibernate的Annotation注解1

    声明为双向关联多对多关联关系多对多关联声明。实例:有如下两个实体,商品:Goods,分类Category。两者是多对一的关联关系。使用Hibernate Ann

    struts Spring Hibernate标签和注解资料合集

    springmvc注解.doc,Spring注解讲解.doc,struts2标签详解.pdf,struts2常用标签.pdf,Struts2页面开发中常用标签.pdf,Struts2注解详细说明文档.doc,Hibernate注解教程:Hibernate Annotation使用实例.maff

    SpringMVC+Hibernate3+CXF整合详细实例

    里面有关于springMVC利用cxf发布webservice和调用接口的详细代码,后台用annotation注解关联数据库,dao层完美封装,架构层次分明,用不到cxf的可以到这个链接免费下载springMVC+hibernate3的实例代码...

    SSH2 annotation 实现struts2.1.6 spring2.5.6 hibernate3.3 全注解开发

    SSH2 annotation 实现struts2.1.6 spring2.5.6 hibernate3.3 全注解开发 hibernate延迟加载_懒加载 具体应用

    使用Annotation并对DAO层封装具有分页功能的S2SH整合实例_好资源0分送

    现在Annotation越来越流行,最近一段时间也学了一些,EJB3.0、Hibernate、Spring等都很好地支持Annotation,而且熟悉了Annotation的话整个项目开发时间会缩短,代码封装比较好,但是封装带来的就是代码阅读就比较...

    SSH2框架搭建实例

    3、struts2的配置采用xml(目前不支持annotation),spring和hibernate使用annotation配置; 4、开发者下载该应用后,只需修改WebRoot\WEB-INF\applicationContext.xml,将其中数据库连接信息修改为自己的即可;

    SpringMVC+Hibernate实例

    &lt;mvc:annotation-driven/&gt; &lt;!--视图解析--&gt; &lt;bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"&gt; ...

    jpa学习资料,这是一份包括源代码的学习资料

    jpa的一个实例学习JPA——Hibernate Annotation使用实例

    Hibernate hql查询代码实例

    主要介绍了Hibernate hql查询代码实例,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下

    Hibernate+中文文档

    5.5.2. 使用 JDK 5.0 的注解(Annotation) 5.6. 数据库生成属性(Generated Properties) 5.7. 辅助数据库对象(Auxiliary Database Objects) 6. 集合类(Collections)映射 6.1. 持久化集合类(Persistent ...

    hibernate3.2中文文档(chm格式)

    5.5.2. 使用 JDK 5.0 的注解(Annotation) 5.6. 数据库生成属性(Generated Properties) 5.7. 辅助数据库对象(Auxiliary Database Objects) 6. 集合类(Collections)映射 6.1. 持久化集合类(Persistent ...

    HibernateAPI中文版.chm

    5.5.2. 使用 JDK 5.0 的注解(Annotation) 5.6. 数据库生成属性(Generated Properties) 5.7. 辅助数据库对象(Auxiliary Database Objects) 6. 集合类(Collections)映射 6.1. 持久化集合类(Persistent ...

Global site tag (gtag.js) - Google Analytics