📄 session-configuration.html
字号:
</p></td></tr><tr><td><tt class="literal">hibernate.cglib.use_reflection_optimizer</tt></td><td> 开启CGLIB来替代运行时反射机制(系统级属性). 反射机制有时在除错时比较有用. 注意即使关闭这个优化, Hibernate还是需要CGLIB. 你不能在<tt class="literal">hibernate.cfg.xml</tt>中设置此属性. <p> <span class="strong">取值</span> <tt class="literal">true</tt> | <tt class="literal">false</tt> </p></td></tr></tbody></table></div><div class="sect2" lang="zh-cn"><div class="titlepage"><div><div><h3 class="title"><a name="configuration-optional-dialects"></a>3.4.1. SQL方言 </h3></div></div><div></div></div><p> 你应当总是为你的数据库将<tt class="literal">hibernate.dialect</tt>属性设置成正确的 <tt class="literal">org.hibernate.dialect.Dialect</tt>子类. 如果你指定一种方言, Hibernate将为上面列出的一些属性使用合理的默认值, 为你省去了手工指定它们的功夫. </p><div class="table"><a name="sql-dialects"></a><p class="title"><b>表 3.8. Hibernate SQL方言 (<tt class="literal">hibernate.dialect</tt>) </b></p><table summary="
 Hibernate SQL方言 (hibernate.dialect)
 " border="1"><colgroup><col><col></colgroup><thead><tr><th>RDBMS</th><th> 方言 </th></tr></thead><tbody><tr><td>DB2</td><td><tt class="literal">org.hibernate.dialect.DB2Dialect</tt></td></tr><tr><td>DB2 AS/400</td><td><tt class="literal">org.hibernate.dialect.DB2400Dialect</tt></td></tr><tr><td>DB2 OS390</td><td><tt class="literal">org.hibernate.dialect.DB2390Dialect</tt></td></tr><tr><td>PostgreSQL</td><td><tt class="literal">org.hibernate.dialect.PostgreSQLDialect</tt></td></tr><tr><td>MySQL</td><td><tt class="literal">org.hibernate.dialect.MySQLDialect</tt></td></tr><tr><td>MySQL with InnoDB</td><td><tt class="literal">org.hibernate.dialect.MySQLInnoDBDialect</tt></td></tr><tr><td>MySQL with MyISAM</td><td><tt class="literal">org.hibernate.dialect.MySQLMyISAMDialect</tt></td></tr><tr><td>Oracle (any version)</td><td><tt class="literal">org.hibernate.dialect.OracleDialect</tt></td></tr><tr><td>Oracle 9i/10g</td><td><tt class="literal">org.hibernate.dialect.Oracle9Dialect</tt></td></tr><tr><td>Sybase</td><td><tt class="literal">org.hibernate.dialect.SybaseDialect</tt></td></tr><tr><td>Sybase Anywhere</td><td><tt class="literal">org.hibernate.dialect.SybaseAnywhereDialect</tt></td></tr><tr><td>Microsoft SQL Server</td><td><tt class="literal">org.hibernate.dialect.SQLServerDialect</tt></td></tr><tr><td>SAP DB</td><td><tt class="literal">org.hibernate.dialect.SAPDBDialect</tt></td></tr><tr><td>Informix</td><td><tt class="literal">org.hibernate.dialect.InformixDialect</tt></td></tr><tr><td>HypersonicSQL</td><td><tt class="literal">org.hibernate.dialect.HSQLDialect</tt></td></tr><tr><td>Ingres</td><td><tt class="literal">org.hibernate.dialect.IngresDialect</tt></td></tr><tr><td>Progress</td><td><tt class="literal">org.hibernate.dialect.ProgressDialect</tt></td></tr><tr><td>Mckoi SQL</td><td><tt class="literal">org.hibernate.dialect.MckoiDialect</tt></td></tr><tr><td>Interbase</td><td><tt class="literal">org.hibernate.dialect.InterbaseDialect</tt></td></tr><tr><td>Pointbase</td><td><tt class="literal">org.hibernate.dialect.PointbaseDialect</tt></td></tr><tr><td>FrontBase</td><td><tt class="literal">org.hibernate.dialect.FrontbaseDialect</tt></td></tr><tr><td>Firebird</td><td><tt class="literal">org.hibernate.dialect.FirebirdDialect</tt></td></tr></tbody></table></div></div><div class="sect2" lang="zh-cn"><div class="titlepage"><div><div><h3 class="title"><a name="configuration-optional-outerjoin"></a>3.4.2. 外连接抓取(Outer Join Fetching) </h3></div></div><div></div></div><p> 如果你的数据库支持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="19.1. 
 抓取策略(Fetching strategies)
 ">第 19.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>3.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>3.4.4. 二级缓存与查询缓存 </h3></div></div><div></div></div><p> 以<tt class="literal">hibernate.cache</tt>为前缀的属性允许你在Hibernate中,使用进程或群集范围内的二级缓存系统. 参见<a href="performance.html#performance-cache" title="19.2. 二级缓存(The Second Level Cache)
 ">第 19.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>3.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>3.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>3.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>表 3.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的AST分析日志 </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> 在使
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -