EJB3 中元数据的首要目标是注释,但是 EJB3 规范提供了一种方法,可以通过 XML 部署描述符来覆盖或替换注释中定义的元数据。在当前版本中,仅支持纯 EJB3 注释覆盖。如果您希望在某些实体中使用 Hibernate 特定功能,则必须使用注释或退回到 hbm 文件。您当然可以在 hbm 文件中混合匹配带注释的实体和实体说明。
单元测试套件显示了一些其他 XML 文件示例。
XML 部署描述符结构经过设计来反映注释结构。因此,如果您了解注释结构,则使用 XML 架构对您来说将非常简单。
您可以定义一个或多个 XML 文件来描述元数据,这些文件将由覆盖引擎合并。
您可以定义可用于所有 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 orm_2_0.xsd"
version="2.0">
<persistence-unit-metadata>
<xml-mapping-metadata-complete/>
<persistence-unit-defaults>
<schema>myschema</schema>
<catalog>mycatalog</catalog>
<cascade-persist/>
</persistence-unit-defaults>
</persistence-unit-metadata>
xml-mapping-metadata-complete
表示应从 XML(即忽略注释)中选取所有实体、映射 siêu 类和可嵌入元数据。
<?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 orm_2_0.xsd" version="2.0"> <package>o
rg.hibernate.test.annotations.reflection</package> <entity cl
ass="Administration" access="PROPERTY" metadata-complete="true"> <table
name="tbl_admin"> <unique-constraint> <column-name>firstname</column-name> <column-name>lastname</column-name> </unique-constraint> </table> <secon
dary-table name="admin2"> <primary-key-join-column name="admin_id" referenced-column-name="id"/> <unique-constraint> <column-name>address</column-name> </unique-constraint> </secondary-table> <id-cl
ass class="SocialSecurityNumber"/> <inher
itance strategy="JOINED"/> <seque
nce-generator name="seqhilo" sequence-name="seqhilo"/> <table
-generator name="table" table="tablehilo"/> ... </entity> <entity class="PostalAdministration"> <prima
ry-key-join-column name="id"/> ... </entity> </entity-mappings>
| |
| |
一个实体必须有一个 在 对于元数据完整(见下文)元素,可以定义 | |
可以定义一个或多个唯一约束,如示例所示 | |
| |
| |
| |
| |
| |
|
<?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 orm_2_0.xsd" version="2.0"> <package>org.hibernate.test.annotations.reflection</package> <entity class="Music" access="PROPERTY" metadata-complete="true"> <discriminator-value>Generic</discriminator-value> <discriminator-column length="34"/> ... </entity> <entity class="PostalAdministration"> <primary-key-join-column name="id"/> <named
-query name="adminById"> <query>select m from Administration m where m.id = :id</query> <hint name="org.hibernate.timeout" value="200"/> </named-query> <named
-native-query name="allAdmin" result-set-mapping="adminrs"> <query>select *, count(taxpayer_id) as taxPayerNumber from Administration, TaxPayer where taxpayer_admin_id = admin_id group by ...</query> <hint name="org.hibernate.timeout" value="200"/> </named-native-query> <sql-r
esult-set-mapping name="adminrs"> <entity-result entity-class="Administration"> <field-result name="name" column="fld_name"/> </entity-result> <column-result name="taxPayerNumber"/> </sql-result-set-mapping> <attri
bute-override name="ground"> <column name="fld_ground" unique="true" scale="2"/> </attribute-override> <association-override name="referer"> <join-column name="referer_id" referenced-column-name="id"/> </association-override> ... </entity> </entity-mappings>
| |
| |
| |
| |
|
<attributes>
<id name="id">
<column name="fld_id"/>
<generated-value generator="generator" strategy="SEQUENCE"/>
<temporal>DATE</temporal>
<sequence-generator name="generator" sequence-name="seq"/>
</id>
<version name="version"/>
<embedded name="embeddedObject">
<attribute-override name"subproperty">
<column name="my_column"/>
</attribute-override>
</embedded>
<basic name="status" optional="false">
<enumerated>STRING</enumerated>
</basic>
<basic name="serial" optional="true">
<column name="serialbytes"/>
<lob/>
</basic>
<basic name="terminusTime" fetch="LAZY">
<temporal>TIMESTAMP</temporal>
</basic>
</attributes>
您可以通过 id
、embedded-id
、version
、embedded
和 basic
覆盖属性。每个元素都可以有相应的子元素:lob
、temporal
、enumerated
、column
。
您可以定义关联的 XML 覆盖。所有关联级别元数据在 实体/属性
、映射超级类/属性
或 可嵌入/属性
中的行为相同。
<attributes>
<one-to-many name="players" fetch="EAGER">
<map-key name="name"/>
<join-column name="driver"/>
<join-column name="number"/>
</one-to-many>
<many-to-many name="roads" target-entity="Administration">
<order-by>maxSpeed</order-by>
<join-table name="bus_road">
<join-column name="driver"/>
<join-column name="number"/>
<inverse-join-column name="road_id"/>
<unique-constraint>
<column-name>driver</column-name>
<column-name>number</column-name>
</unique-constraint>
</join-table>
</many-to-many>
<many-to-many name="allTimeDrivers" mapped-by="drivenBuses">
</attributes>
版权所有 © 2004 Red Hat Inc. 及其他作者