5.1. 映射定义(Mapping declaration)

对象和关系数据库之间的映射通常是用一个XML文档(XML document)来定义的。这个映射文档被设计为易读的, 并且可以手工修改。映射语言是以Java为中心,这意味着映射文档是按照持久化类的定义来创建的, 而非表的定义。

请注意,虽然很多Hibernate用户选择手写XML映射文档,但也有一些工具可以用来生成映射文档, 包括XDoclet,Middlegen和AndroMDA。

让我们从一个映射的例子开始:

  1. <?xml version="1.0"?>
  2. <!DOCTYPE hibernate-mapping PUBLIC
  3. "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
  4. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
  5. <hibernate-mapping package="eg">
  6. <class name="Cat"
  7. table="cats"
  8. discriminator-value="C">
  9. <id name="id">
  10. <generator class="native"/>
  11. </id>
  12. <discriminator column="subclass"
  13. type="character"/>
  14. <property name="weight"/>
  15. <property name="birthdate"
  16. type="date"
  17. not-null="true"
  18. update="false"/>
  19. <property name="color"
  20. type="eg.types.ColorUserType"
  21. not-null="true"
  22. update="false"/>
  23. <property name="sex"
  24. not-null="true"
  25. update="false"/>
  26. <property name="litterId"
  27. column="litterId"
  28. update="false"/>
  29. <many-to-one name="mother"
  30. column="mother_id"
  31. update="false"/>
  32. <set name="kittens"
  33. inverse="true"
  34. order-by="litter_id">
  35. <key column="mother_id"/>
  36. <one-to-many class="Cat"/>
  37. </set>
  38. <subclass name="DomesticCat"
  39. discriminator-value="D">
  40. <property name="name"
  41. type="string"/>
  42. </subclass>
  43. </class>
  44. <class name="Dog">
  45. <!-- mapping for Dog could go here -->
  46. </class>
  47. </hibernate-mapping>

我们现在开始讨论映射文档的内容。我们只描述Hibernate在运行时用到的文档元素和属性。 映射文档还包括一些额外的可选属性和元素,它们在使用schema导出工具的时候会影响导出的数据库schema结果。 (比如, not-null 属性。)