热门文章 | 热门软件| 热门源码 | 热门电影 | 知识库 | 联系我们
软件 源码 教程 影视 健康 招聘
  HTML | JavaScript | ASP | PHP | JSP | NET | VB | VC | VF | Windows | Linux | Mysql | Mssql | Oracle | Struts 
当前位置: 创世纪计算机资源网 -> 文章频道 ->hibernate 
站内搜索:
hibernate之SessionFactory配置(4)
作者:hibernate 来源:hibernate.org 整理日期:2007-3-6

3.5.5. 事务策略配置
如果你希望使用Hibernate的Transaction API,你必须通过hibernate.transaction.factory_class属性指定一个Transaction实例的工厂类。 Transaction API隐藏了底层的事务机制,允许Hibernate代码在受管制和非受管制的环境下都可以运行。

内置的两个标准选择是:

net.sf.hibernate.transaction.JDBCTransactionFactory
使用数据库(JDBC)事务(默认)

net.sf.hibernate.transaction.JTATransactionFactory
使用JTA(假若已经存在一个事务,Session会在这个上下文中工作,否则会启动一个新的事务。)

你也可以自行定义你的事务策略(比如说,一个CORBA事务服务)。

如果你希望在JTA环境中为可变数据使用JVM级别的缓存,你必须指定一个获取JTA TransactionManager的策略,但这对J2EE容易来说不是标准化的:

表 3.5. JTA TransactionManagers

事务工厂类 Application Server
net.sf.hibernate.transaction.JBossTransactionManagerLookup JBoss
net.sf.hibernate.transaction.WeblogicTransactionManagerLookup Weblogic
net.sf.hibernate.transaction.WebSphereTransactionManagerLookup WebSphere
net.sf.hibernate.transaction.OrionTransactionManagerLookup Orion
net.sf.hibernate.transaction.ResinTransactionManagerLookup Resin
net.sf.hibernate.transaction.JOTMTransactionManagerLookup JOTM
net.sf.hibernate.transaction.JOnASTransactionManagerLookup JOnAS
net.sf.hibernate.transaction.JRun4TransactionManagerLookup JRun4
net.sf.hibernate.transaction.BESTransactionManagerLookup Borland ES

3.5.6. 绑定SessionFactory到JNDI
绑定到JNDI的Hibernate SessionFactory可以简化查找工厂和创建新Session的过程。

假若你希望把SessionFactory绑定到一个JNDI命名空间,用hibernate.session_factory_name这个属性指定一个名字(比如,java:comp/env/hibernate/SessionFactory)。如果这个属性省略了,SessionFactory不会被绑定到JNDI。(在一个只读的JNDI默认值实现的环境中,这特别有用。比如,Tomcat。)

当把SessionFactory 绑定到JNDI,Hibernate会使用hibernate.jndi.url,hibernate.jndi.class的值来获得一个初始化上下文的实例。如果他们没有指定,就会使用默认的InitialContext。

如果你选择使用JNDI,EJB或者其他工具类就可以通过JNDI查询得到SessionFactory。

3.5.7. 查询语言替换
你可以使用hibernate.query.substitutions定义新的Hibernate查询短语。比如说:

hibernate.query.substitutions true=1, false=0
会在生成的SQL中把短语true和 false替换成整数值。

hibernate.query.substitutions toLowercase=LOWER
这可以让你重新命名SQL的LOWER函数。

3.6. Logging
通过Apache commons-logging,Hibernate记录很多事件。

commons-logging服务会直接输出到Apache log4j(如果你把log4j.jar放在你的classpath里),或者JDK1.4 logging(如果你运行JDK 1.4或以上版本)。你可以从http://jakarta.apache.org下载log4j。要使用log4j,你需要在你的classpath中放置一个log4j.properties文件。Hibernate发行包中包含一个示例的properties配置文件。

们强烈建议你熟悉Hibernate的log信息。Hibernate的很多工作都会尽量详细的留下log,也没有让它变的难以阅读。这是用来解决问题的最基本的设施。当然也别忘了可以如前所述打开SQL 记录(hibernate.show_sql),在你要解决性能问题时,这是你第一步就需要做的。

3.7. 实现NamingStrategy(命名策略)
net.sf.hibernate.cfg.NamingStrategy接口允许你对数据库对象和schema元素指定“命名标准”。

你可以定义从Java标识符自动生成数据库标识符的规则,或者是映射文件中给出的“逻辑”字段名和表名处理为“物理”表名和字段名的规则。这个功能可以让映射文件变得简洁,消除无用的噪音(比如TBL_前缀等)。Hibernate使用的默认策略是几乎什么都不做。

你可以在增加映射(add mappings)之前调用Configuration.setNamingStrategy()来指定不同的策略。

SessionFactory sf = new Configuration()
    .setNamingStrategy(ImprovedNamingStrategy.INSTANCE)
    .addFile("Item.hbm.xml")
    .addFile("Bid.hbm.xml")
    .buildSessionFactory();
net.sf.hibernate.cfg.ImprovedNamingStrategy 是一个内置的策略,对某些程序,你可以把它作为改造的起点。

3.8. XML配置文件
另一种配置属性的方法是把所有的配置都放在一个名为hibernate.cfg.xml的文件中。这个文件可以被用于替代hibernate.properties文件,如果二者都出现,它会覆盖properties文件。

XML配置文件默认会期望在CLASSPATH的根目录中找到。下面是一个例子。

<?xml version=1.0 encoding=utf-8?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 2.0//EN"

 "http://hibernate.sourceforge.net/hibernate-configuration-2.0.dtd">

<hibernate-configuration>

    <!-- a SessionFactory instance listed as /jndi/name -->
    <session-factory
        name="java:comp/env/hibernate/SessionFactory">

        <!-- properties -->
        <property name="connection.datasource">my/first/datasource</property>
        <property name="dialect">net.sf.hibernate.dialect.MySQLDialect</property>
        <property name="show_sql">false</property>
        <property name="use_outer_join">true</property>
        <property name="transaction.factory_class">
            net.sf.hibernate.transaction.JTATransactionFactory
        </property>
        <property name="jta.UserTransaction">java:comp/UserTransaction</property>

        <!-- mapping files -->
        <mapping resource="org/hibernate/auction/Item.hbm.xml"/>
        <mapping resource="org/hibernate/auction/Bid.hbm.xml"/>

    </session-factory>

</hibernate-configuration>
配置Hibernate只需如此简单:

SessionFactory sf = new Configuration().configure().buildSessionFactory();
你可以使用另外一个名字的XML配置文件:

SessionFactory sf = new Configuration()
    .configure("catdb.cfg.xml")
    .buildSessionFactory();

[1]  [2]  [3]  [4]  
相关文章
暂无