`
javafox
  • 浏览: 54848 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

让Seam使用原生的Hibernate

    博客分类:
  • Seam
阅读更多

Seam自带的seam-gen是一个非常好的命令行工具,它自动创建了程序模板,它创建的程序可以直接用Netbeans和Eclipse打开。 但是它创建的数据层却是EntityManager。对于习惯了Hibernate的开发人员来说,不太习惯。本文介绍如何将Seam工程中的EntityManager改成原生Hibernate。

以seam-gen创建的工程myproject为例:

修改components.xml

<!-- 增加hibernate session -->
<persistence:hibernate-session-factory name="hibernateSessionFactory"/>
<persistence:managed-hibernate-session name="hibernateSession"
                                auto-create="true"
                  session-factory-jndi-name="java:/hibernateSessionFactory"/>

<!-- 将原来的entityManager注释掉
   <persistence:managed-persistence-context name="entityManager"
                                     auto-create="true"
                          entity-manager-factory="#{myprojectEntityManagerFactory}"/>

   <persistence:entity-manager-factory name="myprojectEntityManagerFactory"
                      persistence-unit-name="myproject"/>
-->
 

增加hibernate.cfg.xml

该文件保存于resources/META-INF

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
    <session-factory name="java:/hibernateSessionFactory">
        <property name="show_sql">true</property>
        <property name="format_sql">true</property>
        <property name="connection.datasource">java:/myprojectDatasource</property>
        <property name="hbm2ddl.auto">none</property>
        <property name="cache.provider_class">org.hibernate.cache.HashtableCacheProvider</property>

        <property name="transaction.flush_before_completion">true</property>
        <property name="connection.release_mode">after_statement</property>
        <property name="transaction.manager_lookup_class">org.hibernate.transaction.JBossTransactionManagerLookup</property>
        <property name="transaction.factory_class">org.hibernate.transaction.JTATransactionFactory</property>

<!--
        <mapping class="com.dfsoft.pm.model.User"/>
    -->    
    </session-factory>
</hibernate-configuration>
 

注意!由于seam 并不会自动flush,因此需要将 hibernate.transaction.flush_before_completion 设置为true。
将resources/META-INF中的persistens** 及orm.xml删除。

修改build.xml

最后一步修改build.xml, 主要内容包括去除原来的persistence.xml, orm.xml等,加上hibernate.cfg.xml。搜索persistence.xml, orm.xml将它们注释掉,然后搜索target name="war" depends="compile", 在下面增加

 

<copy tofile="${war.dir}/WEB-INF/classes/hibernate.cfg.xml"
              file="${basedir}/resources/META-INF/hibernate.cfg.xml"
              overwrite="true"/>

 

 修改完毕!可以开始在seam组件中注入hibernateSession了:

...
    @In
    Session hibernateSession;
...

        Criteria criteria = hibernateSession.createCriteria(Project.class);
...

 注意,一旦采用原生的hibernate,你必须在hibernate.cfg.xml中增加实体类的mapping

 

我的博客:http://www.ubone.cn

分享到:
评论
2 楼 lqm1111 2009-03-14  
entityManager.getDelegate();
1 楼 andyhan 2009-03-11  
entityManager貌似有个HibernateSession的代理

相关推荐

Global site tag (gtag.js) - Google Analytics