📄 session-configuration.html
字号:
如果你的数据库支持ANSI, Oracle或Sybase风格的外连接, <span class="emphasis"><em>外连接抓取</em></span>常能通过限制往返数据库次数 (更多的工作交由数据库自己来完成)来提高效率. 外连接允许在单个<tt class="literal">SELECT</tt>SQL语句中, 通过many-to-one, one-to-many, many-to-many和one-to-one关联获取连接对象的整个对象图. </p><p> 将<tt class="literal">hibernate.max_fetch_depth</tt>设为<tt class="literal">0</tt>能在<span class="emphasis"><em>全局</em></span> 范围内禁止外连接抓取. 设为<tt class="literal">1</tt>或更高值能启用one-to-one和many-to-oneouter关联的外连接抓取, 它们通过 <tt class="literal">fetch="join"</tt>来映射. </p><p> 参见<a href="performance.html#performance-fetching" title="20.1. 
 
 抓取策略(Fetching strategies)
 ">第 20.1 节 “ 抓取策略(Fetching strategies) ”</a>获得更多信息. </p></div><div class="sect2" lang="zh-cn"><div class="titlepage"><div><div><h3 class="title"><a name="configuration-optional-binarystreams"></a>4.4.3. 二进制流 (Binary Streams) </h3></div></div><div></div></div><p> Oracle限制那些通过JDBC驱动传输的<tt class="literal">字节</tt>数组的数目. 如果你希望使用<tt class="literal">二进值 (binary)</tt>或 <tt class="literal">可序列化的 (serializable)</tt>类型的大对象, 你应该开启 <tt class="literal">hibernate.jdbc.use_streams_for_binary</tt>属性. <span class="emphasis"><em>这是系统级属性.</em></span> </p></div><div class="sect2" lang="zh-cn"><div class="titlepage"><div><div><h3 class="title"><a name="configuration-optional-cacheprovider"></a>4.4.4. 二级缓存与查询缓存 </h3></div></div><div></div></div><p> 以<tt class="literal">hibernate.cache</tt>为前缀的属性允许你在Hibernate中,使用进程或群集范围内的二级缓存系统. 参见<a href="performance.html#performance-cache" title="20.2. 二级缓存(The Second Level Cache)
 ">第 20.2 节 “二级缓存(The Second Level Cache) ”</a>获取更多的详情. </p></div><div class="sect2" lang="zh-cn"><div class="titlepage"><div><div><h3 class="title"><a name="configuration-optional-querysubstitution"></a>4.4.5. 查询语言中的替换 </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> 将导致符号<tt class="literal">true</tt>和<tt class="literal">false</tt>在生成的SQL中被翻译成整数常量. </p><pre class="programlisting">hibernate.query.substitutions toLowercase=LOWER</pre><p> 将允许你重命名SQL中的<tt class="literal">LOWER</tt>函数. </p></div><div class="sect2" lang="zh-cn"><div class="titlepage"><div><div><h3 class="title"><a name="configuration-optional-statistics"></a>4.4.6. Hibernate的统计(statistics)机制 </h3></div></div><div></div></div><p> 如果你开启<tt class="literal">hibernate.generate_statistics</tt>, 那么当你通过 <tt class="literal">SessionFactory.getStatistics()</tt>调整正在运行的系统时,Hibernate将导出大量有用的数据. Hibernate甚至能被配置成通过JMX导出这些统计信息. 参考<tt class="literal">org.hibernate.stats</tt>中接口的Javadoc,以获得更多信息. </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>4.5. 日志 </h2></div></div><div></div></div><p> Hibernate使用Apache commons-logging来为各种事件记录日志. </p><p> commons-logging将直接输出到Apache Log4j(如果在类路径中包括<tt class="literal">log4j.jar</tt>)或 JDK1.4 logging (如果运行在JDK1.4或以上的环境下). 你可以从<tt class="literal">http://jakarta.apache.org</tt> 下载Log4j. 要使用Log4j,你需要将<tt class="literal">log4j.properties</tt>文件放置在类路径下, 随Hibernate 一同分发的样例属性文件在<tt class="literal">src/</tt>目录下. </p><p> 我们强烈建议你熟悉一下Hibernate的日志消息. 在不失可读性的前提下, 我们做了很多工作,使Hibernate的日志可能地详细. 这是必要的查错利器. 最令人感兴趣的日志分类有如下这些: </p><div class="table"><a name="log-categories"></a><p class="title"><b>表 4.9. Hibernate日志类别 </b></p><table summary="
 Hibernate日志类别
 " border="1"><colgroup><col><col></colgroup><thead><tr><th> 类别 </th><th> 功能 </th></tr></thead><tbody><tr><td><tt class="literal">org.hibernate.SQL</tt></td><td> 在所有SQL DML语句被执行时为它们记录日志 </td></tr><tr><td><tt class="literal">org.hibernate.type</tt></td><td> 为所有JDBC参数记录日志 </td></tr><tr><td><tt class="literal">org.hibernate.tool.hbm2ddl</tt></td><td> 在所有SQL DDL语句执行时为它们记录日志 </td></tr><tr><td><tt class="literal">org.hibernate.pretty</tt></td><td> 在session清洗(flush)时,为所有与其关联的实体(最多20个)的状态记录日志 </td></tr><tr><td><tt class="literal">org.hibernate.cache</tt></td><td> 为所有二级缓存的活动记录日志 </td></tr><tr><td><tt class="literal">org.hibernate.transaction</tt></td><td> 为事务相关的活动记录日志 </td></tr><tr><td><tt class="literal">org.hibernate.jdbc</tt></td><td> 为所有JDBC资源的获取记录日志 </td></tr><tr><td><tt class="literal">org.hibernate.hql.ast</tt></td><td> 为HQL和SQL的自动状态转换和其他关于查询解析的信息记录日志 </td></tr><tr><td><tt class="literal">org.hibernate.secure</tt></td><td> 为JAAS认证请求做日志 </td></tr><tr><td><tt class="literal">org.hibernate</tt></td><td> 为任何Hibernate相关信息做日志 (信息量较大, 但对查错非常有帮助) </td></tr></tbody></table></div><p> 在使用Hibernate开发应用程序时, 你应当总是为<tt class="literal">org.hibernate.SQL</tt> 开启<tt class="literal">debug</tt>级别的日志记录,或者开启<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>4.6. 实现<tt class="literal">NamingStrategy</tt> </h2></div></div><div></div></div><p> <tt class="literal">org.hibernate.cfg.NamingStrategy</tt>接口允许你为数据库中的对象和schema 元素指定一个“命名标准”. </p><p> 你可能会提供一些通过Java标识生成数据库标识或将映射定义文件中"逻辑"表/列名处理成"物理"表/列名的规则. 这个特性有助于减少冗长的映射定义文件. </p><p> 在加入映射定义前,你可以调用 <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">org.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">
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -