HibernateAnnotations参考文档3.2.0CR1目录前言1.翻译说明2.版权声明前言1.创建一个注解项目1.1.系统需求1.2.系统配置2.实体Bean2.1.简介2.2.用EJB3注解进行映射2.2.1.声明实体bean2.2.1.1.定义表(Table)2.2.1.2.乐观锁定版本控制2.2.2.映射简单属性2.2.2.1.声明基本的属性映射2.2.2.2.声明列属性2.2.2.3.嵌入式对象(又名组件)2.2.2.4.无注解之属性的默认值2.2..映射主键属性2.2.4.映射继承关系2.2.4.1.每个类一张表2.2.4.2.每个类层次结构一张表2.2.4.3.连接的子类2.2.4.4.从父类继承的属性2.2.5.映射实体Bean的关联关系2.2.5.1.一对一(One-to-one)2.2.5.2.多对一(Many-to-one)2.2.5.3.集合类型2.2.5.4.用cascading实现传播性持久化(Transitivepersistence)2.2.5.5.关联关系获取2.2.6.映射复合主键与外键2.2.7.映射二级表(secondarytables)2.3.映射查询2.3.1.映射EJBQL/HQL查询2.3.2.映射本地化查询2.4.Hibernate独有的注解扩展2.4.1.实体2.4.2.标识符2.4.3.属性2.4.3.1.访问类型2.4.3.2.公式2.4.3.3.类型2.4.3.4.索引2.4.3.5.@Parent2.4.3.6.生成的属性2.4.4.继承2.4.5.关于单个关联关系的注解2.4.5.1.延迟选项和获取模式2.4.6.关于集合类型的注解2.4.6.1.参数注解2.4.6.2.更多的集合类型2.4.7.缓存2.4.8.过滤器2.4.9.查询3.通过XML覆写元数据3.1.原则3.1.1.全局级别的元数据3.1.2.实体级别的元数据3.1.3.属性级别的元数据3.1.4.关联级别的元数据4.Hibernate验证器4.1.约束4.1.1.什么是约束?4.1.2.内建约束4.1.3.错误信息4.1.4.编写你自己的约束4.1.5.注解你的领域模型4.2.使用验证器框架4.2.1.数据库schema层次验证4.2.2.Hibernate基于事件的验证4.2.3.程序级验证4.2.4.验证信息5.Hibernate与Lucene集成5.1.使用Lucene为实体建立索引5.1.1.注解领域模型5.1.2.启用自动索引A.术语表前言WARNING!ThisisatranslatedversionoftheEnglishHibernatereferencedocumentation.Thetranslatedversionmightnotbeuptodate!However,thedifferencesshouldonlybeveryminor.ConsulttheEnglishreferencedocumentationifyouaremissinginformationorencounteratranslationerror.Ifyouliketocontributetoaparticulartranslation,contactusontheHibernatedevelopermailinglist.Translator(s):RedSagaTranslateTeam满江红翻译团队caoxg@yahoo.com1.翻译说明本文档的翻译是在网络上协作进行的,也会不断根据Hibernate的升级进行更新。提供此文档的目的是为了减缓学习Hibernate的坡度,而非代替原文档。我们建议所有有能力的读者都直接阅读英文原文。若您对翻译有异议,或发现翻译错误,敬请不吝赐教,报告到如下地址:表1.HibernateAnnotationv3翻译团队关于我们满江红.开源,开放源代码在中国的传播与发展,与国内多个Java团体及出版社有深入交流。坚持少说多做的原则,目前有两个团队,“OpenDoc团队”与“翻译团队”,本翻译文档即为翻译团队作品。OpenDoc团队已经推出包括Hibernate、iBatis、Spring、WebWork的多份开放文档,并于2005年5月在Hibernate开放文档基础上扩充成书,出版了原创书籍:《深入浅出Hibernate》,本书400余页,适合各个层次的Hibernate用户。()敬请支持。致谢在我们翻译HibernateAnnotation参考文档的同时,还有一位热心的朋友也在进行着同样序号标题中文标题翻译1审2审--Contents目录LiuChang#1Settingupanannotationsprojec创建一个注解项目melthawZhengShuaisuperq#2EntityBeans-Introduction实体Bean-简介melthawZhengShuaisuperq#3EntityBeans-MappingwithEJB3Annotations实体Bean-用EJB3注解进行映射melthawZhengShuaisuperq,LiuChang,SeanChan#4EntityBeans-MappingQueries实体Bean-映射查询melthawZhengShuaisuperq,LiuChang,SeanChan#5EntityBeans-HibernateAnnotationExtensions实体Bean-Hibernate独有的注解扩展SeanChanmorningmelthaw#6OverridingmetadatathroughXML通过XML覆写元数据icessmelthawSeanChan#7HibernateValidatorHibernate验证器DigitalSonicmorningmelthaw#8HibernateLuceneIntegrationHibernate与Lucene集成mochowmorningmelthaw#9Appendix:Glossary附录:术语表mochowLiuChang曹晓钢的工作,这位朋友就是icess(冰雨),由icess翻译的中文版的地址:版权声明Hibernate英文文档属于Hibernate发行包的一部分,遵循LGPL协议。本翻译版本同样遵循LGPL协议。参与翻译的译者一致同意放弃除署名权外对本翻译版本的其它权利要求。您可以自由链接、下载、传播此文档,或者放置在您的网站上,甚至作为产品的一部分发行。但前提是必须保证全文完整转载,包括完整的版权信息和作译者声明,并不能违反LGPL协议。这里“完整”的含义是,不能进行任何删除/增添/注解。若有删除/增添/注解,必须逐段明确声明那些部分并非本文档的一部分。前言正如其他的ORM工具,Hibernate同样需要元数据来控制在不同数据表达形式之间的转化.在Hibernate2.x里,多数情况下表示映射关系的元数据保存在XML文本文件中.还有一种方式就是Xdoclet,它可以在编译时利用Javadoc中的源码注释信息来进行预处理.现在新的JDK标准(JDK1.5以上)也支持类似的注解功能,但相比之下很多工具对此提供了更强大更好用的支持.以IntelliJIDEA和Eclipse为例,这些IDE工具为JDK5.0注解功能提供了自动完成和语法高亮功能.注解被直接编译到字节码里,并在运行时(对于Hibernate来讲就是启动的时候)通过反射读取这些注解,因此外部XML文件就不再需要了.EJB3规范最终认可了透明化ORM的成功范例以及市场对于这种技术的兴趣.EJB3规范标准化了ORM的基础API而且在任何ORM持久化机制中使用元数据.HibernateEntityManager实现了EJB3持久化规范中定义的编程接口和生命周期规则.在HibernateCore的基础上再结合HibernateAnnotations就实现了一套完整(并且独立)的EJB3持久化解决方案.你可以结合三者来使用,也可以抛开EJB3编程接口和生命周期规则而独立使用注解,甚至只单独使用HibernateCore.这些都取决于项目的商业和技术上的实际需求.Hibernate允许你直接使用nativeAPIs,如果有需要,甚至可以直接操作JDBC和SQL.注意本文档基于HibernateAnnotations的预览版(遵从EJB3.0/JSR-220最终草案).这个版本和新规范中定义的最终概念已经非常接近了.我们的目标是提供一套完整的ORM注解,包括EJB3的标准注解以及Hibernate3的扩展(后者是EJB3规范中没有涉及到的).最终通过注解你可以完成任何可能的映射.详情参考???.EJB3最终草案修改了部分注解,提供了从上一个版本到最新版本的迁移指南.第1章创建一个注解项目1.1.系统需求首先从Hibernate官方网站下载并解压HibernateAnnotations的发布包。这个版本(预览版)要求使用Hibernate3.2.0.CR2或更高版本。请不要和老版本的Hibernate3.x混合起来使用。这个版本在Hibernatecore3.2.0.CR2的基础上工作良好。首先确定你已经安装了JDK5.0。当然就算使用低版本的JDK,Xdoclet也可以提供(基于注解的)元数据所带来的部分功能。不过请注意本文档只描述跟JDK5.0注解有关的内容,关于Xdoclet请参考相关文档。1.2.系统配置首先就是设置classpath(当然是在IDE中创建了一个新项目之后)。将Hibernate3核心文件以及其依赖的第三方库文件(请参考lib/README.txt文件)加入到你的classpath里面。将hibernate-annotations.jar和lib/ejb3-persistence.jar加入到你的classpath里面。如果要使用第5章Hibernate与Lucene集成,还需要将lucene的jar文件加入你的classpath。我们推荐在一个包装器(wrapper)类HibernateUtil的静态初始化代码块中启动Hibernate。或许你在Hibernate文档的其他很多地方看到过这个类,但是要在你的项目中使用注解,还需要对这个辅助(helper)类进行扩展。扩展如下:packagehello;importorg.hibernate.*;importorg.hibernate.cfg.*;importtest.*;importtest.animals.Dog;publicclassHibernateUtil{privatestaticfinalSessionFactorysessionFactory;static{try{sessionFactory=newAnnotationConfiguration().buildSessionFactory();}catch(Throwableex){//Logexception!thrownewExceptionInInitializerError(ex);}}publicstaticSessiongetSession()throwsHibernateException{returnsessionFactory.openSession();}}这里比较有意思的是使用到了AnnotationConfiguration类。在XML配置文件(通常是hibernate.cf