使用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和实体类结构信息共同构成的。