您的位置:首页 > 其它

hibernate配置文档

2014-04-30 15:02 225 查看
http://wenku.baidu.com/link?url=WYBBeSSYuRYa_Zr4y29CphRDCEhj0WgIpX0apvWlumXZkl5ZYuEKZB2drkAsnNaLF22FqZo1C6245kcwHce8EPaCx2yAyfNV32wqulQ63ni

由于 Hibernate 是为了能在各种不同环境下工作而设计的,因此存在着大量的配置参数。幸运的是多数配置参数都有比较直观的默认值,并有随 Hibernate 一同分发的配置样例 hibernate.properties(位于

etc/)来展示各种配置选项。所需做的仅仅是将这个样例文件复制到类路径(classpath)下并进行定制。

3.1. 可编程的配置方式

org.hibernate.cfg.Configuration 实例代表了一个应用程序中 Java 类型到SQL数据库映射的完整集合。org.hibernate.cfg.Configuration 被用来构建一个(不可变的(immutable))org.hibernate.SessionFactory。

映射定义则由不同的 XML 映射定义文件编译而来。

你可以直接实例化 org.hibernate.cfg.Configuration 来获取一个实例,并为它指定 XML 映射定义文件。如果映射定义文件在类路径(classpath)中,请使用 addResource()。例如:

Configuration cfg = new Configuration() .addResource("Item.hbm.xml") .addResource("Bid.hbm.xml");

一个替代方法(有时是更好的选择)是,指定被映射的类,让 Hibernate 帮你寻找映射定义文件:

Configuration cfg = new Configuration()

.addClass(org.hibernate.auction.Item.class) .addClass(org.hibernate.auction.Bid.class);

Hibernate 将会在类路径(classpath)中寻找名字为 /org/hibernate/auction/Item.hbm.xml 和

/org/hibernate/auction/Bid.hbm.xml 映射定义文件。这种方式消除了任何对文件名的硬编码

(hardcoded)。

org.hibernate.cfg.Configuration > 也允许你指定配置属性。例如:

Configuration cfg = new Configuration()

.addClass(org.hibernate.auction.Item.class) .addClass(org.hibernate.auction.Bid.class)

.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQLInnoDBDialect") .setProperty("hibernate.connection.datasource", "java:comp/env/jdbc/test") .setProperty("hibernate.order_updates", "true");

五一长假除了旅游 还能做什么? 辅导补习 美容养颜 家庭家务 加班须知

当然这不是唯一的传递 Hibernate 配置属性的方式,其他可选方式还包括:

1. 传一个 java.util.Properties 实例给 Configuration.setProperties()。

2. 将 hibernate.properties 放置在类路径(classpath)的根目录下(root directory)。 3. 通过 java -Dproperty=value 来设置系统(System)属性。 4. 在 hibernate.cfg.xml 中加入元素 <property>(稍后讨论)。

如果你想快速上路,hibernate.properties 就是最容易的途径。

org.hibernate.cfg.Configuration 实例被设计成启动期间(startup-time)对象,一旦 SessionFactory 创

建完成它就被丢弃了。

3.2. 获得 SessionFactory

当所有映射定义被 org.hibernate.cfg.Configuration 解析后,应用程序必须获得一个用于构造

org.hibernate.Session 实例的工厂。这个工厂将被应用程序的所有线程共享:

SessionFactory sessions = cfg.buildSessionFactory();

Hibernate 允许你的应用程序创建多个 org.hibernate.SessionFactory 实例。这对 使用多个数据库的应用来说很有用。

3.3. JDBC 连接

通常你希望 org.hibernate.SessionFactory 来为你创建和缓存(pool)JDBC 连接。如果你采用这种方式,只需要如下例所示那样,打开一个 org.hibernate.Session:

Session session = sessions.openSession(); // open a new Session

一旦你需要进行数据访问时,就会从连接池(connection pool)获得一个 JDBC 连接。

为了使这种方式工作起来,我们需要向 Hibernate 传递一些 JDBC 连接的属性。所有 Hibernate 属性的名字和语义都在 org.hibernate.cfg.Environment 中定义。我们现在将描述 JDBC 连接配置中最重要的设置。

如果你设置如下属性,Hibernate 将使用 java.sql.DriverManager 来获得(和缓存)JDBC 连接:

表 3.1. Hibernate JDBC 属性

属性名

用途

hibernate.connection.driver_class JDBC driver class hibernate.connection.url JDBC URL hibernate.connection.username database user

hibernate.connection.password 数据库用户密码

hibernate.connection.pool_size maximum number of pooled connections

但 Hibernate 自带的连接池算法相当不成熟。它只是为了让你快些上手,并不适合用于产品系统或性能测试中。 出于最佳性能和稳定性考虑你应该使用第三方的连接池。只需要用特定连接池的设置替换

hibernate.connection.pool_size 即可。这将关闭 Hibernate 自带的连接池。例如,你可能会想用 C3P0。

C3P0 是一个随 Hibernate 一同分发的开源的 JDBC 连接池,它位于 lib目录下。 如果你设置了

hibernate.c3p0.* 相关的属性,Hibernate将使用 C3P0ConnectionProvider 来缓存 JDBC 连接。如果

你更原意使用 Proxool,请参考发行包中的 hibernate.properties 并到 Hibernate 网站获取更多的信息。

这是一个使用 C3P0 的 hibernate.properties 样例文件:

hibernate.connection.driver_class = org.postgresql.Driver

hibernate.connection.url = jdbc:postgresql://localhost/mydatabase hibernate.connection.username = myuser hibernate.connection.password = secret hibernate.c3p0.min_size=5 hibernate.c3p0.max_size=20 hibernate.c3p0.timeout=1800 hibernate.c3p0.max_statements=50

hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect

为了能在应用程序服务器(application server)中使用 Hibernate,应当总是将 Hibernate 配置成从注册在 JNDI 中的 Datasource 处获得连接,你至少需要设置下列属性中的一个:

表 3.2. Hibernate 数据源属性

属性名

用途

hibernate.connection.datasource 数据源 JNDI 名字

hibernate.jndi.url JNDI 提供者的 URL(可选)

hibernate.jndi.class

JNDI InitialContextFactory 类(可选)

hibernate.connection.username 数据库用户(可选) hibernate.connection.password 数据库密码(可选)

这是一个使用应用程序服务器提供的 JNDI 数据源的 hibernate.properties 样例文件:

hibernate.connection.datasource = java:/comp/env/jdbc/test hibernate.transaction.factory_class = \

org.hibernate.transaction.JTATransactionFactory hibernate.transaction.manager_lookup_class = \

org.hibernate.transaction.JBossTransactionManagerLookup hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect

从 JNDI 数据源获得的 JDBC 连接将自动参与到应用程序服务器中容器管理的事务(container-managed transactions)中去。

任何连接(connection)属性的属性名都要以 "hibernate.connnection" 开头。例如,你可能会使用

hibernate.connection.charSet 来指定 charSet 连接属性。

通过实现 org.hibernate.connection.ConnectionProvider 接口,你可以定义属于你自己的获得JDBC连接的插件策略。通过设置hibernate.connection.provider_class,你可以选择一个自定义的实现。

3.4. 可选的配置属性

有大量属性能用来控制 Hibernate 在运行期的行为。它们都是可选的,并拥有适当的默认值。

警告

其中一些属性是"系统级(system-level)的"。系统级属性只能通过java -Dproperty=value 或

hibernate.properties 来设置,而不能用上面描述的其他方法来设置。

表 3.3. Hibernate 配置属性

属性名 用途

hibernate.dialect

允许 Hibernate 针对特定的关系数据库生成优化的 SQL 的 org.hibernate.dialect.Dialect 的类名。

例如:full.classname.of.Dialect

在大多数情况下,Hibernate 可以根据 JDBC 驱动返回的

JDBC

metadata

选择正确的

org.hibernate.dialect.Dialect 实现。

hibernate.show_sql

输出所有 SQL 语句到控制台。有一个另外的选择是把

org.hibernate.SQL 这个 log category设为 debug。

例如:true | false

hibernate.format_sql

在 log 和 console 中打印出更漂亮的 SQL。

例如:true | false

hibernate.default_schema

在生成的 SQL 中,将给定的 schema/tablespace 附加

于非全限定名的表名上。

例如:SCHEMA_NAME

hibernate.default_catalog

在生成的 SQL 中,将给定的 catalog 附加于非全限定名

的表名上。

例如:CATALOG_NAME

hibernate.session_factory_name

org.hibernate.SessionFactory 创建后,将自动使用这个名

字绑定到 JNDI 中。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: