让Seam使用原生的Hibernate

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值