JPA 教程(二) .

来源:互联网 发布:最优化求非线性方程 编辑:程序博客网 时间:2024/05/01 06:44

使用XML元数据 
除了使用注解提供元数据信息外,JPA也允许我们通过XML提供元数据信息。

条条道路通罗马,路路都是安康道,开发者安全可以根据自己的习惯喜好择一而从。

按照JPA的规范,如果你提供了XML元数据描述信息,它将覆盖实体类中的注解元数据信息。

XML元数据信息以orm.xml 命名,放置在类路径的META-INF目录下。


JPA尽量让XML和注解的元数据在描述的结构上相近,降低学习曲线和转换难度,所以我们在学习注解元数据后,学习XML元数据变得非常简单。

下面,我们给出以上实体的XML描述版本,你可以对照注解的描述进行比较学习:
代码清单 6 XML元数据配置:orm.xml

Xml代码  收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm"  
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4. xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm http://java.sun.com/xml/ns/persistence/orm_1_0.xsd"  
  5. version="1.0">  
  6.       ①实体对象所在的包  
  7.       <package>com.baobaotao.domain</package>  
  8.       <entity class="Topic">  
  9.             ②Topic实体配置  
  10.             <table name="T_TOPIC" />  
  11.             <attributes>  
  12.                    <id name="topicId">  
  13.                         <column name="TOPIC_ID"/>  
  14.                         <generated-value strategy="TABLE" />  
  15.                   </id>  
  16.                           
  17.                   <basic name="topicTitle">  
  18.                         <column name="TOPIC_TITLE" length="30" />  
  19.                   </basic>  
  20.   
  21.                   <basic name="topicTime">  
  22.                         <column name="TOPIC_TIME" />  
  23.                         <temporal>DATE</temporal>  
  24.                   </basic>  
  25.   
  26.                   <basic name="topicViews">  
  27.                         <column name="TOPIC_VIEWS" />  
  28.                   </basic>  
  29.             </attributes>  
  30.       </entity>  
  31.   
  32.       <entity class="PollTopic">  
  33.             ②PollTopic实体配置  
  34.             <discriminator-value>2</discriminator-value>  
  35.             <attributes>  
  36.                   <basic name="maxChoices">  
  37.                         <column name="MAX_CHOICES" />  
  38.                   </basic>  
  39.   
  40.                   <one-to-many name="options" mapped-by="pollTopic">  
  41.                         <cascade>  
  42.                               <cascade-all/>  
  43.                         </cascade>  
  44.                   </one-to-many>  
  45.             </attributes>  
  46.       </entity>  
  47.   
  48.       <entity class="PollOption">  
  49.             ②PollOption实体配置  
  50.             <table name="T_POLL_OPTION" />  
  51.             <attributes>  
  52.                   <id name="optionId">  
  53.                         <column name="OPTION_ID" />  
  54.                         <generated-value strategy="TABLE" />  
  55.                   </id>  
  56.   
  57.                   <basic name="optionItem">  
  58.                         <column name="OPTION_ITEM"/>  
  59.                   </basic>  
  60.   
  61.                   <many-to-one name="pollTopic" >  
  62.                         <join-column name="TOPIC_ID" nullable="false"/>  
  63.                   </many-to-one>  
  64.   
  65.             </attributes>  
  66.       </entity>  
  67.   
  68.       <entity class="Post">  
  69.             ②Post实体配置  
  70.             <table name="T_POST" />  
  71.             <attributes>  
  72.                   <id name="postId">  
  73.                         <column name="POST_ID" />  
  74.                         <generated-value strategy="TABLE" />  
  75.                   </id>  
  76.   
  77.                   <basic name="postText" fetch="EAGER">  
  78.                         <column name="POST_TEXT" column-definition="LONGTEXT NOT NULL"/>  
  79.                         <lob/>  
  80.                   </basic>  
  81.   
  82.                   <basic name="postAttach" fetch="LAZY">  
  83.                         <column name="POST_ATTACH" column-definition="BLOB"/>  
  84.                         <lob/>  
  85.                   </basic>  
  86.             </attributes>  
  87.       </entity>  
  88. </entity-mappings>  

从代码清单 6中,我们可以看出PollTopic并不需要通过特殊配置指定和Topic的继承关系,这些信息将从实体类反射信息获取。

所以从严格意义上来说,元数据信息或XML和实体类结构信息共同构成的。

原创粉丝点击