📄 session-configuration.html
字号:
<tt class="literal">true|false</tt> </p></td></tr><tr><td><tt class="literal">hibernate.cache.region_prefix</tt></td><td><span class="emphasis"><em>用于第二层缓存区域名字的前缀</em></span><p> <span class="strong">取值.</span> <tt class="literal">prefix</tt> </p></td></tr><tr><td><tt class="literal">hibernate.transaction.factory_class</tt></td><td><span class="emphasis"><em>指定一个自定义的<tt class="literal">TransactionFactory</tt>类名,Hibernate Transaction API将会使用</em></span><p> <span class="strong">取值.</span> <tt class="literal">classname.of.TransactionFactory</tt> </p></td></tr><tr><td><tt class="literal">jta.UserTransaction</tt></td><td><span class="emphasis"><em><tt class="literal">JTATransactionFactory</tt> 用来获取JTA <tt class="literal">UserTransaction</tt>的JNDI名</em></span><p> <span class="strong">取值.</span> <tt class="literal">jndi/composite/name</tt> </p></td></tr><tr><td><tt class="literal">hibernate.transaction.manager_lookup_class</tt></td><td><span class="emphasis"><em> <tt class="literal">TransactionManagerLookup</tt>的类名 - 当在JTA环境中,JVM级别的缓存被打开的时候使用</em></span><p> <span class="strong">取值.</span> <tt class="literal">classname.of.TransactionManagerLookup</tt> </p></td></tr><tr><td><tt class="literal">hibernate.query.substitutions</tt></td><td><span class="emphasis"><em>把Hibernate查询中的一些短语替换为SQL短语(比如说短语可能是函数或者字符) .</em></span><p> <span class="strong">取值.</span> <tt class="literal">hqlLiteral=SQL_LITERAL, hqlFunction=SQLFUNC</tt> </p></td></tr><tr><td><tt class="literal">hibernate.show_sql</tt></td><td><span class="emphasis"><em>把所有的SQL语句都输出到控制台(可以作为log功能的一个替代)</em></span><p> <span class="strong">取值.</span> <tt class="literal">true</tt> | <tt class="literal">false</tt> </p></td></tr><tr><td><tt class="literal">hibernate.hbm2ddl.auto</tt></td><td><span class="emphasis"><em>自动输出schema创建DDL语句.</em></span><p> <span class="strong">取值.</span> <tt class="literal">update</tt> | <tt class="literal">create</tt> | <tt class="literal">create-drop</tt> </p></td></tr></tbody></table></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="session-configuration-s5-1"></a>3.5.1. SQL Dialects SQL 方言</h3></div></div><div></div></div><p> 你总是可以为你的数据库设置一个<tt class="literal">hibernate.dialect</tt>方言,它是<tt class="literal">net.sf.hibernate.dialect.Dialect</tt> 的一个子类。如果你不需要使用基于<tt class="literal">native</tt>或者<tt class="literal">sequence</tt>的主键自动生成算法,或者悲观锁定(使用<tt class="literal">Session.lock()</tt> 或 <tt class="literal">Query.setLockMode()</tt>)的话,方言就可以不必指定。然而,假若你指定了一个方言,Hibernate会为上面列出的一些属性使用特殊默认值,省得你手工指定它们。 </p><div class="table"><a name="d0e1364"></a><p class="title"><b>Table 3.4. 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">net.sf.hibernate.dialect.DB2Dialect</tt></td></tr><tr><td>MySQL</td><td><tt class="literal">net.sf.hibernate.dialect.MySQLDialect</tt></td></tr><tr><td>SAP DB</td><td><tt class="literal">net.sf.hibernate.dialect.SAPDBDialect</tt></td></tr><tr><td>Oracle (所有版本)</td><td><tt class="literal">net.sf.hibernate.dialect.OracleDialect</tt></td></tr><tr><td>Oracle 9</td><td><tt class="literal">net.sf.hibernate.dialect.Oracle9Dialect</tt></td></tr><tr><td>Sybase</td><td><tt class="literal">net.sf.hibernate.dialect.SybaseDialect</tt></td></tr><tr><td>Sybase Anywhere</td><td><tt class="literal">net.sf.hibernate.dialect.SybaseAnywhereDialect</tt></td></tr><tr><td>Progress</td><td><tt class="literal">net.sf.hibernate.dialect.ProgressDialect</tt></td></tr><tr><td>Mckoi SQL</td><td><tt class="literal">net.sf.hibernate.dialect.MckoiDialect</tt></td></tr><tr><td>Interbase</td><td><tt class="literal">net.sf.hibernate.dialect.InterbaseDialect</tt></td></tr><tr><td>Pointbase</td><td><tt class="literal">net.sf.hibernate.dialect.PointbaseDialect</tt></td></tr><tr><td>PostgreSQL</td><td><tt class="literal">net.sf.hibernate.dialect.PostgreSQLDialect</tt></td></tr><tr><td>HypersonicSQL</td><td><tt class="literal">net.sf.hibernate.dialect.HSQLDialect</tt></td></tr><tr><td>Microsoft SQL Server</td><td><tt class="literal">net.sf.hibernate.dialect.SybaseDialect</tt></td></tr><tr><td>Ingres</td><td><tt class="literal">net.sf.hibernate.dialect.IngresDialect</tt></td></tr><tr><td>Informix</td><td><tt class="literal">net.sf.hibernate.dialect.InformixDialect</tt></td></tr><tr><td>FrontBase</td><td><tt class="literal">net.sf.hibernate.dialect.FrontbaseDialect</tt></td></tr></tbody></table></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="session-configuration-s5-2"></a>3.5.2. 外连接抓取(Outer Join Fetching )</h3></div></div><div></div></div><p> 如果你的数据库支持ANSI或者Oracle风格的外连接,<span class="emphasis"><em>外连接抓取</em></span>可能提高性能,因为可以限制和数据库交互的数量(代价是数据库自身进行了更多的工作)。外连接抓取允许你在一个select语句中就可以得到一个由多对一或者一对一连接构成的对象图。 </p><p> 默认情况下,抓取在叶对象,拥有代理的对象或者产生对自身的引用时终止。对一个<span class="emphasis"><em>特定关联</em></span>来说,通过在XML映射文件中设置<tt class="literal">outer-join</tt>属性可以控制是否开启抓取功能。也可以设置<tt class="literal">hibernate.use_outer_join</tt>为<tt class="literal">false</tt>来全局关闭此功能。 你也可以通过<tt class="literal">hibernate.max_fetch_depth</tt>来设置抓取得对象图的最大深度。 </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="session-configuration-s5-3"></a>3.5.3. 二进制流</h3></div></div><div></div></div><p> Oracle限制通过它的JDBC驱动传递的<tt class="literal">byte</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>这只能通过JVM级别设定</em></span> </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="session-configuration-s5-4"></a>3.5.4. 在控制台记录SQL</h3></div></div><div></div></div><p> <tt class="literal">hibernate.show_sql</tt>强制Hibernate把每一句SQL语句都写到控制台。这是作为打开log的一个简易替代。 </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="session-configuration-s5-5"></a>3.5.5. 自定义 <tt class="literal">ConnectionProvider</tt></h3></div></div><div></div></div><p> 你可以自定义你的获取JDBC连接的策略,只需要实现<tt class="literal">net.sf.hibernate.connection.ConnectionProvider</tt>接口。在<tt class="literal">hibernate.connection.provider_class</tt>设置你自己的实现的类名。 </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="session-configuration-s5-5b"></a>3.5.6. 常用数据库属性</h3></div></div><div></div></div><p> 几个配置属性影响除了<tt class="literal">DatasourceConnectionProvider</tt>之外的所有内置连接提供者.它们是: <tt class="literal">hibernate.connection.driver_class</tt>, <tt class="literal">hibernate.connection.url</tt>, <tt class="literal">hibernate.connection.username</tt> and <tt class="literal">hibernate.connection.password</tt>. </p><p> <tt class="literal">hibernate.connection.isolation</tt>应该指定为一个整数值。(查阅<tt class="literal">java.sql.Connection</tt>可以得到值的含义,但注意大多数数据库不会支持所有的隔离级别。) </p><p> 专用的连接属性可以通过在"<tt class="literal">hibernate.connnection</tt>"后面加上属性名来指定。比如,你可以通过<tt class="literal">hibernate.connnection.charSet</tt>指定一个<tt class="literal">charSet</tt>。 </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="session-configuration-s5-6"></a>3.5.7. 自定义<tt class="literal">CacheProvider</tt></h3></div></div><div></div></div><p> 通过实现<tt class="literal">net.sf.hibernate.cache.CacheProvider</tt>接口,你可以整合一个JVM级别(或者集群的)缓存进来。你可以通过<tt class="literal">hibernate.cache.provider_class</tt>选择某个子定义的实现。 </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="session-configuration-s5-7"></a>3.5.8. 事务策略</h3></div></div><div></div></div><p> 如果你希望使用Hibernate的<tt class="literal">Transaction</tt> API,你必须通过<tt class="literal">hibernate.transaction.factory_class</tt>属性指定一个<tt class="literal">Transaction</tt>实例的工厂类。 内置的两个标准选择是: </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> </p><p> 你也可以自行定义你的事务策略(比如说,一个CORBA事务服务)。 </p><p> 如果你希望在JTA环境中为可变数据使用JVM级别的缓存,你必须指定一个获取JTA <tt class="literal">TransactionManager</tt>的策略。 </p><div class="table"><a name="d0e1640"></a><p class="title"><b>Table 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></tbody></table></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="session-configuration-s5-8"></a>3.5.9. 绑定<tt class="literal">SessionFactory</tt>到JNDI</h3></div></div><div></div></div><p>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -