如果无须HIbernate自己管理数据源,而是直接访问容器管理数据源,Hibernate可使用JNDI(Java命名目录接口)数据源的相关配置。下面是连接JNDI数据源的主要配置属性。
hibernate.connection.datasource:指定数据源JNDI名字。
hibernate.jndi.url:指定JNDI提供者的URL,该属性是可选的。如果JNDI与HIbernate持久化访问的代码处在同一个应用中。则无须指定该属性。
hibernate.jndi.class:指定JND InitialContextFactory的实现类,该属性也是可选的。如果JNDI与HIbernate持久化访问的代码处在同一个应用中。则无须指定该属性。
hibernate.connection.username:该属性是可选的。
hibernate.connection.passowrd:该属性是可选的。
注意:即使使用JNDI数据源,一样需要指定连接数据库的方言,虽然设置数据库方言并不是必需的,但对于优化持久层访问很有必要。
配置Hibernate连接Tomcat中数据源的配置片段如下:
<!--配置JNDI数据源的JNDI名-->
<property name="connection.datasource">java:comp/env/jdbc/dstest</propery>
<!--配置连接数据库方言-->
<property name="dialect">org.hibernate.dialect.MYSQLDialect</property>
如果容器支持事务管理,从JNDI数据源获得的JDBC连接,可自动参与容器管理的全局事务,而不仅仅是HIbernate的局部事务。
事务也是Hibernate持久层访问的重要方面,HIbernate不仅提供了局部事务支持,也允许使用容器管理的全局事务。Hibernate关于事务管理的属性有以下几个:
hibernate.transaction.flush_before_completion:指定Session是否在事务完成后自动将数据刷新(flush)到底层数据库。该属性值只能为true或false。现在更好的方法是使用Context相关的Session管理。
hibernate.transaction.auto_close_session:指定是否在事务结束后自动关闭Session。该属性值只能是true或flase。现在更好的办法是使用Context相关的Session管理