📄 session-configuration.html
字号:
内置的两个标准选择是: </p><div class="variablelist"><dl><dt><span class="term"><tt class="literal">net.sf.hibernate.transaction.JDBCTransactionFactory</tt></span></dt><dd><p>使用数据库(JDBC)事务(默认)</p></dd><dt><span class="term"><tt class="literal">net.sf.hibernate.transaction.JTATransactionFactory</tt></span></dt><dd><p>使用JTA(假若已经存在一个事务,<tt class="literal">Session</tt>会在这个上下文中工作,否则会启动一个新的事务。)</p></dd></dl></div><p> 你也可以自行定义你的事务策略(比如说,一个CORBA事务服务)。 </p><p> 如果你希望在JTA环境中为可变数据使用JVM级别的缓存,你必须指定一个获取JTA <tt class="literal">TransactionManager</tt>的策略,但这对J2EE容易来说不是标准化的: </p><div class="table"><a name="jtamanagerlookup"></a><p class="title"><b>表 3.5. JTA TransactionManagers</b></p><table summary="JTA TransactionManagers" border="1"><colgroup><col><col></colgroup><thead><tr><th>事务工厂类</th><th align="center">Application Server</th></tr></thead><tbody><tr><td><tt class="literal">net.sf.hibernate.transaction.JBossTransactionManagerLookup</tt></td><td align="center">JBoss</td></tr><tr><td><tt class="literal">net.sf.hibernate.transaction.WeblogicTransactionManagerLookup</tt></td><td align="center">Weblogic</td></tr><tr><td><tt class="literal">net.sf.hibernate.transaction.WebSphereTransactionManagerLookup</tt></td><td align="center">WebSphere</td></tr><tr><td><tt class="literal">net.sf.hibernate.transaction.OrionTransactionManagerLookup</tt></td><td align="center">Orion</td></tr><tr><td><tt class="literal">net.sf.hibernate.transaction.ResinTransactionManagerLookup</tt></td><td align="center">Resin</td></tr><tr><td><tt class="literal">net.sf.hibernate.transaction.JOTMTransactionManagerLookup</tt></td><td align="center">JOTM</td></tr><tr><td><tt class="literal">net.sf.hibernate.transaction.JOnASTransactionManagerLookup</tt></td><td align="center">JOnAS</td></tr><tr><td><tt class="literal">net.sf.hibernate.transaction.JRun4TransactionManagerLookup</tt></td><td align="center">JRun4</td></tr><tr><td><tt class="literal">net.sf.hibernate.transaction.BESTransactionManagerLookup</tt></td><td align="center">Borland ES</td></tr></tbody></table></div></div><div class="sect2" lang="zh-cn"><div class="titlepage"><div><div><h3 class="title"><a name="configuration-optional-jndi"></a>3.5.6. 绑定<tt class="literal">SessionFactory</tt>到JNDI</h3></div></div><div></div></div><p> 绑定到JNDI的Hibernate <tt class="literal">SessionFactory</tt>可以简化查找工厂和创建新<tt class="literal">Session</tt>的过程。 </p><p> 假若你希望把<tt class="literal">SessionFactory</tt>绑定到一个JNDI命名空间,用<tt class="literal">hibernate.session_factory_name</tt>这个属性指定一个名字(比如,<tt class="literal">java:comp/env/hibernate/SessionFactory</tt>)。如果这个属性省略了,<tt class="literal">SessionFactory</tt>不会被绑定到JNDI。(在一个只读的JNDI默认值实现的环境中,这特别有用。比如,Tomcat。) </p><p> 当把<tt class="literal">SessionFactory</tt> 绑定到JNDI,Hibernate会使用<tt class="literal">hibernate.jndi.url</tt>,<tt class="literal">hibernate.jndi.class</tt>的值来获得一个初始化上下文的实例。如果他们没有指定,就会使用默认的<tt class="literal">InitialContext</tt>。 </p><p> 如果你选择使用JNDI,EJB或者其他工具类就可以通过JNDI查询得到<tt class="literal">SessionFactory</tt>。 </p></div><div class="sect2" lang="zh-cn"><div class="titlepage"><div><div><h3 class="title"><a name="configuration-optional-querysubstitution"></a>3.5.7. 查询语言替换 </h3></div></div><div></div></div><p> 你可以使用<tt class="literal">hibernate.query.substitutions</tt>定义新的Hibernate查询短语。比如说: </p><pre class="programlisting">hibernate.query.substitutions true=1, false=0</pre><p> 会在生成的SQL中把短语<tt class="literal">true</tt>和 <tt class="literal">false</tt>替换成整数值。 </p><pre class="programlisting">hibernate.query.substitutions toLowercase=LOWER</pre><p> 这可以让你重新命名SQL的<tt class="literal">LOWER</tt>函数。 </p></div></div><div class="sect1" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="configuration-logging"></a>3.6. Logging</h2></div></div><div></div></div><p> 通过Apache commons-logging,Hibernate记录很多事件。 </p><p> commons-logging服务会直接输出到Apache log4j(如果你把<tt class="literal">log4j.jar</tt>放在你的classpath里),或者JDK1.4 logging(如果你运行JDK 1.4或以上版本)。你可以从<tt class="literal">http://jakarta.apache.org</tt>下载log4j。要使用log4j,你需要在你的classpath中放置一个<tt class="literal">log4j.properties</tt>文件。Hibernate发行包中包含一个示例的properties配置文件。 </p><p> 我们强烈建议你熟悉Hibernate的log信息。Hibernate的很多工作都会尽量详细的留下log,也没有让它变的难以阅读。这是用来解决问题的最基本的设施。当然也别忘了可以如前所述打开SQL 记录(<tt class="literal">hibernate.show_sql</tt>),在你要解决性能问题时,这是你第一步就需要做的。 </p></div><div class="sect1" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="configuration-namingstrategy"></a>3.7. 实现<tt class="literal">NamingStrategy(命名策略)</tt></h2></div></div><div></div></div><p> <tt class="literal">net.sf.hibernate.cfg.NamingStrategy</tt>接口允许你对数据库对象和schema元素指定“命名标准”。 </p><p> 你可以定义从Java标识符自动生成数据库标识符的规则,或者是映射文件中给出的“逻辑”字段名和表名处理为“物理”表名和字段名的规则。这个功能可以让映射文件变得简洁,消除无用的噪音(比如<tt class="literal">TBL_</tt>前缀等)。Hibernate使用的默认策略是几乎什么都不做。 </p><p> 你可以在增加映射(add mappings)之前调用<tt class="literal">Configuration.setNamingStrategy()</tt>来指定不同的策略。 </p><pre class="programlisting">SessionFactory sf = new Configuration() .setNamingStrategy(ImprovedNamingStrategy.INSTANCE) .addFile("Item.hbm.xml") .addFile("Bid.hbm.xml") .buildSessionFactory();</pre><p> <tt class="literal">net.sf.hibernate.cfg.ImprovedNamingStrategy</tt> 是一个内置的策略,对某些程序,你可以把它作为改造的起点。 </p></div><div class="sect1" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="configuration-xmlconfig"></a>3.8. XML配置文件</h2></div></div><div></div></div><p> 另一种配置属性的方法是把所有的配置都放在一个名为<tt class="literal">hibernate.cfg.xml</tt>的文件中。这个文件可以被用于替代<tt class="literal">hibernate.properties</tt>文件,如果二者都出现,它会覆盖properties文件。 </p><p> XML配置文件默认会期望在<tt class="literal">CLASSPATH</tt>的根目录中找到。下面是一个例子。 </p><pre class="programlisting"><?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></pre><p> 配置Hibernate只需如此简单: </p><pre class="programlisting">SessionFactory sf = new Configuration().configure().buildSessionFactory();</pre><p> 你可以使用另外一个名字的XML配置文件: </p><pre class="programlisting">SessionFactory sf = new Configuration() .configure("catdb.cfg.xml") .buildSessionFactory();</pre></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="architecture.html">上一页</a> </td><td width="20%" align="center"><a accesskey="u" href="index.html">上一级</a></td><td width="40%" align="right"> <a accesskey="n" href="persistent-classes.html">下一页</a></td></tr><tr><td width="40%" align="left" valign="top">第 2 章 体系结构 </td><td width="20%" align="center"><a accesskey="h" href="index.html">起始页</a></td><td width="40%" align="right" valign="top"> 第 4 章 持久化类(Persistent Classes)</td></tr></table></div></body></html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -