Hibernate实战_笔记13(切换回Hibernate接口)

切换到Hibernate接口

      决定用Hibernate作为JPA持久化的提供程序有几个原因:首先,Hibernate是一个很好的JPA实现,它提供许多不影响代码的选项。例如可以在JPA配置中启用Hibernate的二级数据高速缓存,并透明地提升应用的性能和可量测性,而不需要动任何代码。
其次,必要时可以使用原生的Hibernate映射或API。但是这里我们要说明,需要的时候,你如何能够可以在JPA应用中使用Hibernate API。显示,把Hibernate API导入代码中使得把代码移植到一个不同的JPA提供程序变得更困难了。因此,正确地隔离这部分代码变得尤其重要,或者至少用文档说明你为什么和何时使用过一个原生的Hibernate特性。
      你可以从它们对应的JPA接口退回到Hibernate API,获得Configuration、SessionFactory,必要时甚至是Session。
注意,下载JBoss Community(找了好久的啊)
下载地址:http://sourceforge.net/projects/jboss/?source=directory
package cn.jbit.ejbjpa.test;

import java.sql.Connection;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.ejb.Ejb3Configuration;
import org.hibernate.ejb.HibernateEntityManager;
import org.hibernate.ejb.HibernateEntityManagerFactory;

public class Test2 {


	public static void main(String[] args) {
		Ejb3Configuration cfg = new Ejb3Configuration();
		EntityManagerFactory emf = cfg.buildEntityManagerFactory();
		// 使用Hibernate原生Configuration
		Configuration hcfg = cfg.getHibernateConfiguration();

		HibernateEntityManagerFactory hibemf = (HibernateEntityManagerFactory) emf;
		// 使用Hibernate原生SessionFactory
		SessionFactory sessionFactory = hibemf.getSessionFactory();

		EntityManager em = emf.createEntityManager();
		// 使用Hibernate原生Session
		HibernateEntityManager hibem = (HibernateEntityManager) em;
		Session session = hibem.getSession();
		// 方法2
		// Session session2 = (Session) hibem.getDelegate();
		// 极少情况下,能够从Hibernate Session退出到简单的JDBC接口
		// Connection jdbcConnection = session.connection();
	}
}
这最后一个选项有一些警告:不允许你关闭从Hibernate中获得的JDBC Connection——它会自动进行。
      直接访问JDBC连接的一种更好更安全的方法是通过Java EE5.0中的资源注入。在一个EJB、EJB监听器、servlet、servlet过滤器甚至JavaServer Faces backing bean(JSF)中,注解一个字段或者设置方法,像下面这样:
@Resource(mappedName="java:/BdqnDS") DataSource ds;
      目前为止,假设你是在一个没有涉及遗留应用程序代码(或者现有的数据库Schema)的新Hibernate或者新JPA项目上进行。现在转换一下视角,考虑一个自底而上的开发过程。在这样一个场景中,你或许想要自动地从现有的数据库Schema中反射工程所需要创建的东西。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值