JPA 教程(二)

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

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

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

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


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

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

<?xml version="1.0" encoding="UTF-8"?>
<entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm http://java.sun.com/xml/ns/persistence/orm_1_0.xsd"
version="1.0">
      ①实体对象所在的包
      <package>com.baobaotao.domain</package>
      <entity class="Topic">
            ②Topic实体配置
            <table name="T_TOPIC" />
            <attributes>
                   <id name="topicId">
                        <column name="TOPIC_ID"/>
                        <generated-value strategy="TABLE" />
                  </id>
                        
                  <basic name="topicTitle">
                        <column name="TOPIC_TITLE" length="30" />
                  </basic>

                  <basic name="topicTime">
                        <column name="TOPIC_TIME" />
                        <temporal>DATE</temporal>
                  </basic>

                  <basic name="topicViews">
                        <column name="TOPIC_VIEWS" />
                  </basic>
            </attributes>
      </entity>

      <entity class="PollTopic">
            ②PollTopic实体配置
            <discriminator-value>2</discriminator-value>
            <attributes>
                  <basic name="maxChoices">
                        <column name="MAX_CHOICES" />
                  </basic>

                  <one-to-many name="options" mapped-by="pollTopic">
                        <cascade>
                              <cascade-all/>
                        </cascade>
                  </one-to-many>
            </attributes>
      </entity>

      <entity class="PollOption">
            ②PollOption实体配置
            <table name="T_POLL_OPTION" />
            <attributes>
                  <id name="optionId">
                        <column name="OPTION_ID" />
                        <generated-value strategy="TABLE" />
                  </id>

                  <basic name="optionItem">
                        <column name="OPTION_ITEM"/>
                  </basic>

                  <many-to-one name="pollTopic" >
                        <join-column name="TOPIC_ID" nullable="false"/>
                  </many-to-one>

            </attributes>
      </entity>

      <entity class="Post">
            ②Post实体配置
            <table name="T_POST" />
            <attributes>
                  <id name="postId">
                        <column name="POST_ID" />
                        <generated-value strategy="TABLE" />
                  </id>

                  <basic name="postText" fetch="EAGER">
                        <column name="POST_TEXT" column-definition="LONGTEXT NOT NULL"/>
                        <lob/>
                  </basic>

                  <basic name="postAttach" fetch="LAZY">
                        <column name="POST_ATTACH" column-definition="BLOB"/>
                        <lob/>
                  </basic>
            </attributes>
      </entity>
</entity-mappings>

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

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

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值