最近对hibernate的JPA实现比较感兴趣,在此记录下配置方法,备查。


先上maven依赖包配置,这里使用的是spring3.1.2和hibernate3.6.0

        
        
            org.hibernate
            hibernate-entitymanager
            3.6.0.Final
        
        
            org.springframework
            spring-webmvc
            3.1.2.RELEASE
        
        
            org.springframework
            spring-orm
            3.1.2.RELEASE
        
        
            com.microsoft.sqlserver
            sqljdbc
            4.0
        
        
            org.slf4j
            slf4j-log4j12
            1.6.1
        
        

然后是spring配置 applicationContext.xml,需要注意的是此处数据源是JNDI,在生产环境下建议使用此方式,而不建议使用properties文件,因为提供给实施人员的代码都是各种war包,别人不可能剥开你的war包来修改properties。而是直接改中间件的数据源配置。其他一些配置如路径之类的最好都交给容器来配置,而不要把经常改动的配置文件放在工程里。

       
    
    
                
                
    
    
                
    
    
    

最后是JPA配置 类路径下META-INF/persistence.xml,多个数据库方言,请配置多个单元!



    
        org.hibernate.ejb.HibernatePersistence
        
            
            
            
        
    

在JAVA bean中注入JPA的EntityManager对象,以DAO为例,如此就能在spring中正确集成JPA了

@Transactional
public abstract class BaseDao implements IBaseDao {

    @PersistenceContext
    protected EntityManager em;
    
    ...
}


最后,谈下个人的理解,JPA相比与hibernate独有的sessionFactory来讲更有利于ORM开发。最近在看的GraniteDS就比较推荐使用JPA的方式做ORM。到底好不好,还有待后续的积累来验证。

做ORM的目的主要还是一个,就是代码的简洁灵活。目前公司使用的还是spring的jdbcTemplate,要自行管理SQL语句,做CRUD操作以及生成对象或集合要相对繁琐。而且当工程量大了以后,SQL语句的维护是一件麻烦的事情。不如hibernate之类来的快。