- 浏览: 7339407 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (1546)
- 企业中间件 (236)
- 企业应用面临的问题 (236)
- 小布Oracle学习笔记汇总 (36)
- Spring 开发应用 (54)
- IBatis开发应用 (16)
- Oracle基础学习 (23)
- struts2.0 (41)
- JVM&ClassLoader&GC (16)
- JQuery的开发应用 (17)
- WebService的开发应用 (21)
- Java&Socket (44)
- 开源组件的应用 (254)
- 常用Javascript的开发应用 (28)
- J2EE开发技术指南 (163)
- EJB3开发应用 (11)
- GIS&Mobile&MAP (36)
- SWT-GEF-RCP (52)
- 算法&数据结构 (6)
- Apache开源组件研究 (62)
- Hibernate 学习应用 (57)
- java并发编程 (59)
- MySQL&Mongodb&MS/SQL (15)
- Oracle数据库实验室 (55)
- 搜索引擎的开发应用 (34)
- 软件工程师笔试经典 (14)
- 其他杂项 (10)
- AndroidPn& MQTT&C2DM&推技术 (29)
- ActiveMQ学习和研究 (38)
- Google技术应用开发和API分析 (11)
- flex的学习总结 (59)
- 项目中一点总结 (20)
- java疑惑 java面向对象编程 (28)
- Android 开发学习 (133)
- linux和UNIX的总结 (37)
- Titanium学习总结 (20)
- JQueryMobile学习总结 (34)
- Phonegap学习总结 (32)
- HTML5学习总结 (41)
- JeeCMS研究和理解分析 (9)
最新评论
-
lgh1992314:
[u][i][b][flash=200,200][url][i ...
看看mybatis 源代码 -
尼古拉斯.fwp:
图片根本就不出来好吧。。。。。。
Android文件图片上传的详细讲解(一)HTTP multipart/form-data 上传报文格式实现手机端上传 -
ln94223:
第一个应该用排它网关吧 怎么是并行网关, 并行网关是所有exe ...
工作流Activiti的学习总结(八)Activiti自动执行的应用 -
ZY199266:
获取不到任何消息信息,请问这是什么原因呢?
ActiveMQ 通过JMX监控Connection,Queue,Topic的信息 -
xiaoyao霄:
DestinationSourceMonitor 报错 应该导 ...
ActiveMQ 通过JMX监控Connection,Queue,Topic的信息
以通过一系列Eclipse插件、命令行工具和Ant任务来进行与Hibernate关联的转换。
除了Ant任务外,当前的Hibernate Tools也包含了Eclipse IDE的插件,用于与现存数据库的逆向工程。
-
Mapping Editor: Hibernate XML映射文件的编辑器,支持自动完成和语法高亮。它也支持对类名和属性/字段名的语义自动完成,比通常的XML编辑器方便得多。
-
Console: Console是Eclipse的一个新视图。除了对你的console配置的树状概览,你还可以获得对你持久化类及其关联的交互式视图。Console允许你对数据库执行HQL查询,并直接在Eclipse中浏览结果。
-
Development Wizards: 在Hibernate Eclipse tools中还提供了几个向导;你可以用向导快速生成Hibernate 配置文件(cfg.xml),你甚至还可以同现存的数据库schema中反向工程出POJO源代码与Hibernate 映射文件。反向工程支持可定制的模版。
-
Ant Tasks:
要得到更多信息,请查阅 Hibernate Tools 包及其文档。
同时,Hibernate主发行包还附带了一个集成的工具(它甚至可以在Hibernate“内部”快速运行)SchemaExport ,也就是 hbm2ddl
。
可以从你的映射文件使用一个Hibernate工具生成DDL。 生成的schema包含有对实体和集合类表的完整性引用约束(主键和外键)。涉及到的标示符生成器所需的表和sequence也会同时生成。
在使用这个工具的时候,你必须 通过hibernate.dialet
属性指定一个SQL方言(Dialet)
,因为DDL是与供应商高度相关的。
首先,要定制你的映射文件,来改善生成的schema。
很多Hibernate映射元素定义了可选的length
、precision
或者 scale
属性。你可以通过这个属性设置字段的长度、精度、小数点位数。
<property name="zip" length="5"/>
<property name="balance" precision="12" scale="2"/>
有些tag还接受not-null
属性(用来在表字段上生成NOT NULL
约束)和unique
属性(用来在表字段上生成UNIQUE
约束)。
<many-to-one name="bar" column="barId" not-null="true"/>
<element column="serialNumber" type="long" not-null="true" unique="true"/>
unique-key
属性可以对成组的字段指定一个唯一键约束(unique key constraint)。目前,unique-key
属性指定的值在生成DDL时并不会被当作这个约束的名字,它们只是在用来在映射文件内部用作区分的。
<many-to-one name="org" column="orgId" unique-key="OrgEmployeeId"/> <property name="employeeId" unique-key="OrgEmployee"/>
index
属性会用对应的字段(一个或多个)生成一个index,它指出了这个index的名字。如果多个字段对应的index名字相同,就会生成包含这些字段的index。
<property name="lastName" index="CustName"/> <property name="firstName" index="CustName"/>
foreign-key
属性可以用来覆盖任何生成的外键约束的名字。
<many-to-one name="bar" column="barId" foreign-key="FKFooBar"/>
很多映射元素还接受<column>
子元素。这在定义跨越多字段的类型时特别有用。
<property name="name" type="my.customtypes.Name"/> <column name="last" not-null="true" index="bar_idx" length="30"/> <column name="first" not-null="true" index="bar_idx" length="20"/> <column name="initial"/> </property>
default
属性为字段指定一个默认值 (在保存被映射的类的新实例之前,你应该将同样的值赋于对应的属性)。
<property name="credits" type="integer" insert="false"> <column name="credits" default="10"/> </property>
<version name="version" type="integer" insert="false"> <column name="version" default="0"/> </property>
sql-type
属性允许用户覆盖默认的Hibernate类型到SQL数据类型的映射。
<property name="balance" type="float"> <column name="balance" sql-type="decimal(13,3)"/> </property>
check
属性允许用户指定一个约束检查。
<property name="foo" type="integer"> <column name="foo" check="foo > 10"/> </property>
<class name="Foo" table="foos" check="bar < 100.0"> ... <property name="bar" type="float"/> </class>
表 20.1. Summary
length |
数字 | 字段长度 |
precision |
数字 | 精度(decimal precision) |
scale |
数字 | 小数点位数(decimal scale) |
not-null |
true|false |
指明字段是否应该是非空的 |
unique |
true|false |
指明是否该字段具有惟一约束 |
index |
index_name |
指明一个(多字段)的索引(index)的名字 |
unique-key |
unique_key_name |
指明多字段惟一约束的名字(参见上面的说明) |
foreign-key |
foreign_key_name |
specifies the name of the foreign key constraint generated for an association, for a <one-to-one> , <many-to-one> , <key> , or <many-to-many> mapping element. Note that inverse="true" sides will not be considered by SchemaExport . 指明一个外键的名字,它是为关联生成的,或者<one-to-one> ,<many-to-one> , <key> , 或者<many-to-many> 映射元素。注意inverse="true" 在SchemaExport 时会被忽略。 |
sql-type |
SQL 字段类型 |
覆盖默认的字段类型(只能用于<column> 属性) |
default |
SQL表达式 | 为字段指定默认值 |
check |
SQL 表达式 | 对字段或表加入SQL约束检查 |
<comment>
元素可以让你在生成的schema中加入注释。
<class name="Customer" table="CurCust"> <comment>Current customers only</comment> ... </class>
<property name="balance"> <column name="bal"> <comment>Balance in USD</comment> </column> </property>
结果是在生成的DDL中包含comment on table
或者 comment on column
语句(假若支持的话)。
SchemaExport
工具把DDL脚本写到标准输出,同时/或者执行DDL语句。
java -cp
hibernate_classpaths org.hibernate.tool.hbm2ddl.SchemaExport
options mapping_files
表 20.2. SchemaExport
命令行选项
--quiet |
不要把脚本输出到stdout |
--drop |
只进行drop tables的步骤 |
--create |
只创建表 |
--text |
不执行在数据库中运行的步骤 |
--output=my_schema.ddl |
把输出的ddl脚本输出到一个文件 |
--naming=eg.MyNamingStrategy |
选择一个命名策略(NamingStrategy ) |
--config=hibernate.cfg.xml |
从XML文件读入Hibernate配置 |
--properties=hibernate.properties |
从文件读入数据库属性 |
--format |
把脚本中的SQL语句对齐和美化 |
--delimiter=; |
为脚本设置行结束符 |
你甚至可以在你的应用程序中嵌入SchemaExport
工具:
Configuration cfg = ....; new SchemaExport(cfg).create(false, true);
可以通过如下方式指定数据库属性:
-
通过
-D
<property>系统参数 -
在
hibernate.properties
文件中 -
位于一个其它名字的properties文件中,然后用
--properties
参数指定
所需的参数包括:
表 20.3. SchemaExport 连接属性
hibernate.connection.driver_class |
jdbc driver class |
hibernate.connection.url |
jdbc url |
hibernate.connection.username |
database user |
hibernate.connection.password |
user password |
hibernate.dialect |
方言(dialect) |
你可以在你的Ant build脚本中调用SchemaExport
:
<target name="schemaexport"> <taskdef name="schemaexport" classname="org.hibernate.tool.hbm2ddl.SchemaExportTask" classpathref="class.path"/> <schemaexport properties="hibernate.properties" quiet="no" text="no" drop="no" delimiter=";" output="schema-export.sql"> <fileset dir="src"> <include name="**/*.hbm.xml"/> </fileset> </schemaexport> </target>
SchemaUpdate
工具对已存在的schema采用"增量"方式进行更新。注意SchemaUpdate
严重依赖于JDBC metadata API,所以它并非对所有JDBC驱动都有效。
java -cp
hibernate_classpaths org.hibernate.tool.hbm2ddl.SchemaUpdate
options mapping_files
表 20.4. SchemaUpdate
命令行选项
--quiet |
不要把脚本输出到stdout |
--text |
不把脚本输出到数据库 |
--naming=eg.MyNamingStrategy |
选择一个命名策略 (NamingStrategy ) |
--properties=hibernate.properties |
从指定文件读入数据库属性 |
--config=hibernate.cfg.xml |
指定一个 .cfg.xml 文件 |
你可以在你的应用程序中嵌入SchemaUpdate
工具:
Configuration cfg = ....; new SchemaUpdate(cfg).execute(false);
你可以在Ant脚本中调用SchemaUpdate
:
<target name="schemaupdate"> <taskdef name="schemaupdate" classname="org.hibernate.tool.hbm2ddl.SchemaUpdateTask" classpathref="class.path"/> <schemaupdate properties="hibernate.properties" quiet="no"> <fileset dir="src"> <include name="**/*.hbm.xml"/> </fileset> </schemaupdate> </target>
SchemaValidator
工具会比较数据库现状是否与映射文档“匹配”。注意,SchemaValidator
严重依赖于JDBC的metadata API,因此不是对所有的JDBC驱动都适用。这一工具在测试的时候特别有用。
java -cp
hibernate_classpaths org.hibernate.tool.hbm2ddl.SchemaValidator
options mapping_files
表 20.5. SchemaValidator
命令行参数
--naming=eg.MyNamingStrategy |
选择一个命名策略 (NamingStrategy ) |
--properties=hibernate.properties |
从文件中读取数据库属性 |
--config=hibernate.cfg.xml |
指定一个.cfg.xml 文件 |
你可以在你的应用程序中嵌入SchemaValidator
:
Configuration cfg = ....; new SchemaValidator(cfg).validate();
你可以在Ant脚本中调用SchemaValidator
:
<target name="schemavalidate"> <taskdef name="schemavalidator" classname="org.hibernate.tool.hbm2ddl.SchemaValidatorTask" classpathref="class.path"/> <schemavalidator properties="hibernate.properties"> <fileset dir="src"> <include name="**/*.hbm.xml"/> </fileset> </schemaupdate> </target>
- hibernate.hbm2ddl.auto update
将会发现Hibernate不会为我们创建任何自定义的索引(不包括主键跟外键索引),不论你使用xml方式或者annotation进行声明配置
这个问题在Hibernate的JIRA多次出现,甚至有人专门为此发布了打了补丁的hibernate.jar
这个所谓的bug,在目前已发布的hibernate的版本中,一直都没有解决,或者说不予理睬(Gavin King个人认为这个不是bug)
这里引用hibernate 3.2.5版的jira
http://opensource.atlassian.com/projects/hibernate/browse/HHH-1012
引用Hibernate上官方的解释
The hibernate.hbm2ddl.auto=update setting doesn't create indexes
SchemaUpdate is activated by this configuration setting. SchemaUpdate is not really very powerful and comes without any warranties. For example, it does not create any indexes automatically. Furthermore, SchemaUpdate is only useful in development, per definition (a production schema is never updated automatically). You don't need indexes in development.
Hibernate doesn't generate the database indexes I want in the schema!
Automatic schema export (and update) by Hibernate tools is only useful in development. You never need indexes in development, they are purely for performance and scalability tuning in production systems. Production schemas are never automatically generated, at least not completely. A DBA adds indexes to the automatically generated schema during SQL tuning and testing of the application, before going into production with the (possibly automatically generated) base schema, and her handwritten optimized DDL. Also note that optimized DDL is highly vendor specific and totally dependent on the environment (SQL execution plans, tablespace configuration, caches, etc). Even if Hibernate developers would encourage you to automatically generate production-ready schemas (we don't, and we also don't like ad-hoc SQL tuning by throwing a bunch of indexes onto a schema), Hibernate could never offer such a feature.
郁闷非常的一个"BUG",只有把hibernate.hbm2ddl.auto update 改成create才能生成索引
发表评论
-
【转】在项目中使用多个数据源-多sessionFactory方案
2013-05-10 16:30 3131适用范围:适合SSH架构访问多个数据库, ... -
Hibernate使用中从数据库到模型的加载方式研究
2010-01-28 13:19 1966在项目中数据库中账单Bill一个字段是有多个订单id的以逗 ... -
hibernate中@Transient的使用
2010-01-19 15:20 10707项目中可能有许多实体的需要辅助的属性和方法辅助,hibe ... -
关于hibernate中注解和hbm共存时的加载规律
2010-01-19 15:13 3805项目中使用Spring2.5+hibern ... -
hibernate查询的使用的点滴积累
2010-01-09 13:04 1916/** * 前台查询酒店的级别,设备,类型 * * ... -
Hibernate 的HQL中一个经典函数elements的使用
2010-01-09 12:53 10347在传递索引和元素给集合时(elements and indic ... -
Hibernate关联查询中with的经典使用
2010-01-09 12:42 2215在项目采用Hibernate关联,采用关联使用比较简单,在关 ... -
判断数据库表每条记录中时间段是否在每一个时间段中
2010-01-09 12:35 3100项目中一个成品价格表,每条记录中的价格有一个使用时间 ... -
JPA 中注解一个父类中多个子类实现查询部分子类方法解决方法
2010-01-09 12:10 2073父类: @Entity@Inheritance(stra ... -
Hibernate调用执行存储过程
2010-01-09 12:03 2035项目中需要采用存 ... -
Hibernate的一个异常的解决方案
2009-12-05 11:01 2447在项目中使用HQL时的遇有多个类的嵌套比较发生的异常: ... -
Hibernate的事件和拦截器体系
2009-12-01 13:53 2362持久层框架底层的拦截器机制是对诸如Spring等业务管理容器拦 ... -
Hibernate的拦截器和监听器
2009-12-01 13:52 1978最近项目需要,用到了Hibernate的拦截器和监听器,有些小 ... -
Hibernate的拦截器和监听器
2009-12-01 13:50 3804项目采用Spring构建,持久层技术采用的是 JPA规范 + ... -
Hibernate的注解many-to-one
2009-11-28 12:12 23277項目中一個實例: ... -
Hibernate查询语言HQL 八大要点
2009-11-18 13:15 2014本文讲述Hibernate查询语言HQL。Hibernat ... -
条件查询(Criteria Queries
2009-11-18 13:14 1774... -
Hibernate查询语言(Query Language), 即HQL
2009-11-18 13:05 2480Hibernate查询语言(Query L ... -
Hibernate中的配置属性
2009-11-15 17:40 1761hbm2ddl.auto的使用配置说明: <!-- ... -
Hibernate JPA 的索引的使用
2009-11-15 17:30 11885在Hibernate中Model中一个对象关 ...
相关推荐
这份文档全面地介绍了Hibernate 3.2版本的各项功能和使用方法,帮助开发者更好地理解和应用这一强大的对象关系映射(ORM)工具。 在ORM领域,Hibernate作为一个优秀的框架,极大地简化了Java应用程序与数据库之间的...
hibernate-3.2-libhibernate-3.2-libhibernate-3.2-libhibernate-3.2-libhibernate-3.2-libhibernate-3.2-libhibernate-3.2-lib
Hibernate是一个开源的对象关系映射(ORM)框架,它允许...总的来说,“hibernate-3.2 jar包”是Java开发中一个重要的工具,它极大地简化了数据库操作,提高了开发效率,同时也为项目提供了良好的可维护性和可扩展性。
此资源包括hibernate-3.2\lib\antlr-2.7.6.jar hibernate-3.2\lib\asm.jar hibernate-3.2\lib\cglib-2.1.3.jar hibernate-3.2\lib\commons-collections-2.1.1.jar hibernate-3.2\lib\commons-...
本文将针对《spring-framework-3.2.x-for-eclipse.rar》这个压缩包文件,详细介绍如何在Eclipse开发环境中搭建Spring 3.2.x源码分析环境,并探讨其中的关键知识点。 首先,我们来看标题中的"spring-framework-3.2.x...
Hibernate-3.2-API, CHM格式
在提供的文件内容中,我们可以提取出关于Spring3.2框架的详细知识点。Spring是一个开源的Java/Java EE全功能栈的应用程序框架,它通过提供一系列的工具和库来简化Java应用的开发。文件内容涉及了Spring框架的多个...
达梦数据DmDialect-for-hibernate所有jar包,DmDialect-for-hibernate2.0、DmDialect-for-hibernate2.1、DmDialect-for-hibernate3.0、DmDialect-for-hibernate3.1、DmDialect-for-hibernate3.6、DmDialect-for-...
官方版本,亲测可用
在“hibernate-orm-3.2.zip”这个压缩包中,包含的是Hibernate 3.2版本的相关文件,这是一个历史悠久且广泛使用的版本。下面,我们将深入探讨Hibernate ORM 3.2中的关键知识点。 一、对象关系映射(ORM) ORM是将...
在Java开发领域,ORM(对象关系映射)框架是连接数据库的重要工具,而Hibernate作为其中的佼佼者,一直以来都深受开发者喜爱。本篇文章将深入探讨 Hibernate 实体管理器(Hibernate EntityManager)3.2版本的核心...
在Hibernate-3.2中,配置文件通常为`hibernate.cfg.xml`,包含了数据库连接信息、实体类映射、缓存策略等设置。通过`Configuration`类加载配置,然后构建SessionFactory。 三、实体类与映射文件 Hibernate通过ORM...
在本压缩包“hibernate-3.2.zip”中,我们可能找到了Hibernate 3.2版本的相关资料,这是一款发布于2007年的稳定版本,它在当时的Java社区中被广泛使用。 Hibernate 3.2版引入了许多增强功能和改进,包括: 1. **...
《深入剖析Hibernate 3.2源代码》 Hibernate是一个开源的对象关系映射(ORM)框架,它极大地简化了Java应用程序与数据库之间的交互。在Hibernate 3.2版本中,开发者们能够更深入地理解其内部机制,从而提高开发效率...
hibernate-3.2\lib\antlr-2.7.6.jar hibernate-3.2\lib\asm.jar hibernate-3.2\lib\cglib-2.1.3.jar hibernate-3.2\lib\commons-collections-2.1.1.jar hibernate-3.2\lib\commons-logging-1.0.4....
spring-hibernate.jar
国产达梦数据库hibernate方言包
hibernate-3.2.0源码和hibernate-3.2.0所有的jar包。
**jBPM-JPDL v3.2 环境部署详解** jBPM (Java Business Process Management) 是一个开源的工作流管理系统,用于处理业务流程的建模、部署、执行和监控。JPDL (jBPM Process Definition Language) 是jBPM使用的流程...