📄 session-configuration.html
字号:
假若你希望把<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="en"><div class="titlepage"><div><div><h3 class="title"><a name="session-configuration-s5-9"></a>3.5.10. 查询语言替换 </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="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="session-configuration-s6"></a>3.6. XML配置文件</h2></div></div><div></div></div><p> 另一种配置属性的方法是把所有的配置都放在一个名为<tt class="literal">hibernate.cfg.xml</tt>的文件中。这个文件应该放在你的<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="eg/Edge.hbm.xml"/> <mapping resource="eg/Vertex.hbm.xml"/> </session-factory></hibernate-configuration></pre><p> 配置Hibernate只需如此简单: </p><pre class="programlisting">SessionFactory sf = new Configuration().configure().buildSessionFactory();</pre><p> 你可以使用另外一个名字的配置文件: </p><pre class="programlisting">SessionFactory sf = new Configuration() .configure("catdb.cfg.xml") .buildSessionFactory();</pre></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="session-configuration-s7"></a>3.7. Logging</h2></div></div><div></div></div><p> 通过Apache commons-logging,Hibernate记录很多事件。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,也没有让它变的难以阅读。这是用来解决问题的最基本的设施。 </p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="session-configuration-s8"></a>3.8. <tt class="literal">NamingStrategy(命名策略)</tt></h2></div></div><div></div></div><p> <tt class="literal">net.sf.hibernate.cfg.NamingStrategy</tt>接口允许你对数据库对象指定“命名标准”。你可以定义从Java标识符自动生成数据库标识符的规则,或者是映射文件中给出的“逻辑”字段名和表名处理为“物理”表名和字段名的规则。这个功能可以让映射文件变得简洁,消除无用的噪音(比如<tt class="literal">TBL_</tt>前缀等)。Hibernate使用的默认策略是几乎什么都不错。你可以在增加映射(add mappings)之前调用<tt class="literal">Configuration.setNamingStrategy()</tt>来指定不同的策略。 </p><pre class="programlisting">SessionFactory sf = new Configuration() .setNamingStrategy(ImprovedNamingStrategy.INSTANCE) .addFile("Vertex.hbm.xml") .addFile("Edge.hbm.xml") .buildSessionFactory();</pre><p> <tt class="literal">net.sf.hibernate.cfg.ImprovedNamingStrategy</tt> 是一个内置的策略,对某些程序,你可以把它作为改造的起点。 </p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="architecture.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="index.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="persistent-classes.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 2. 体系结构 </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 4. 持久化类(Persistent Classes)</td></tr></table></div></body></html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -