blob: 8198de4db91725b0b725082d48e2cfc47fa69e01 [file] [log] [blame]
<?xml version="1.0" encoding="UTF-8"?>
<!--
Copyright (c) 2018, 2020 Oracle and/or its affiliates. All rights reserved.
This program and the accompanying materials are made available under the
terms of the Eclipse Public License v. 2.0 which is available at
http://www.eclipse.org/legal/epl-2.0,
or the Eclipse Distribution License v. 1.0 which is available at
http://www.eclipse.org/org/documents/edl-v10.php.
SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
-->
<entity-mappings version="2.3" xmlns="http://www.eclipse.org/eclipselink/xsds/persistence/orm" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<description>Advanced Dynamic Test Model Instance Document</description>
<persistence-unit-metadata>
<persistence-unit-defaults>
<access>VIRTUAL</access>
<access-methods get-method="getMy" set-method="setMy"/>
</persistence-unit-defaults>
</persistence-unit-metadata>
<package>org.eclipse.persistence.testing.models.jpa.xml.advanced.dynamic</package>
<type-converter name="String2String" data-type="String" object-type="String"/>
<entity name="DynamicEmployee" class="Employee" existence-checking="CHECK_DATABASE">
<customizer class="EmployeeCustomizer"/>
<change-tracking type="AUTO"/>
<table name="DYNAMIC_EMPLOYEE"/>
<secondary-table name="DYNAMIC_SALARY">
<primary-key-join-column name="E_ID" referenced-column-name="EMP_ID"/>
</secondary-table>
<optimistic-locking type="VERSION_COLUMN" cascade="true"/>
<cache type="SOFT_WEAK" size="730" shared="true" disable-hits="true" always-refresh="false" coordination-type="INVALIDATE_CHANGED_OBJECTS">
<!-- disable-hits is set to true. Do not change it, the employee customizer will set it to false and there is a test to verify that. -->
<expiry>1000</expiry>
</cache>
<object-type-converter name="sex" data-type="String" object-type="Employee$Gender">
<conversion-value data-value="F" object-value="Female"/>
<conversion-value data-value="M" object-value="Male"/>
</object-type-converter>
<table-generator name="DYNAMIC_EMPLOYEE_TABLE_GENERATOR" table="DYNAMIC_EMPLOYEE_SEQ" pk-column-name="SEQ_NAME" value-column-name="SEQ_COUNT" pk-column-value="DYNAMIC_EMPLOYEE_SEQ"/>
<named-query name="findAllDynamicEmployeesByFirstName">
<query>SELECT OBJECT(employee) FROM DynamicEmployee employee WHERE employee.firstName = :firstName</query>
</named-query>
<named-query name="findDynamicEmployeeById">
<query>SELECT OBJECT(employee) FROM DynamicEmployee employee WHERE employee.id = :id</query>
</named-query>
<entity-listeners>
<entity-listener class="EmployeeListener">
<pre-persist method-name="prePersist"/>
<post-persist method-name="postPersist"/>
<pre-remove method-name="preRemove"/>
<post-remove method-name="postRemove"/>
<pre-update method-name="preUpdate"/>
<post-update method-name="postUpdate"/>
<post-load method-name="postLoad"/>
</entity-listener>
</entity-listeners>
<attributes>
<id name="id" attribute-type="Integer">
<column name="EMP_ID"/>
<generated-value strategy="TABLE" generator="DYNAMIC_EMPLOYEE_TABLE_GENERATOR"/>
</id>
<basic name="firstName" attribute-type="String">
<column name="F_NAME"/>
<convert>String2String</convert>
</basic>
<basic name="lastName" attribute-type="String">
<column name="L_NAME"/>
</basic>
<basic name="sin" attribute-type="String">
<column name="SIN"/>
</basic>
<!-- Enums not supported -->
<!-- basic name="gender">
<column name="GENDER"/>
<convert>sex</convert>
</basic -->
<basic name="salary" attribute-type="Integer">
<column table="DYNAMIC_SALARY"/>
</basic>
<!-- Enums not supported -->
<!-- basic name="payScale">
<column name="PAY_SCALE"/>
<enumerated>STRING</enumerated>
</basic -->
<version name="version" attribute-type="Integer">
<column name="VERSION"/>
</version>
<many-to-one name="address" target-entity="Address" fetch="LAZY">
<join-column name="ADDR_ID"/>
<cascade>
<cascade-persist/>
</cascade>
<join-fetch>OUTER</join-fetch>
</many-to-one>
<many-to-one name="manager" target-entity="Employee" fetch="LAZY">
<join-column name="MANAGER_EMP_ID" referenced-column-name="EMP_ID"/>
<cascade>
<cascade-persist/>
</cascade>
</many-to-one>
<!-- PhoneNumber uses a composite primary key - not supported -->
<!-- one-to-many name="phoneNumbers" target-entity="PhoneNumber" mapped-by="owner">
<cascade>
<cascade-all/>
</cascade>
</one-to-many -->
<one-to-many name="managedEmployees" target-entity="Employee" mapped-by="manager" attribute-type="java.util.Collection">
<cascade>
<cascade-all/>
</cascade>
</one-to-many>
<many-to-many name="projects" target-entity="Project" attribute-type="java.util.Collection">
<order-by>name</order-by>
<join-table name="DYNAMIC_PROJ_EMP">
<join-column name="EMP_ID" referenced-column-name="EMP_ID"/>
<inverse-join-column name="PROJ_ID" referenced-column-name="PROJ_ID"/>
</join-table>
<cascade>
<cascade-persist/>
</cascade>
</many-to-many>
<element-collection name="responsibilities" attribute-type="java.util.Collection" target-class="String">
<column name="DESCRIPTION"/>
<convert>String2String</convert>
<collection-table name="DYNAMIC_RESPONS">
<join-column name="EMP_ID"/>
</collection-table>
</element-collection>
<element-collection name="creditCards" fetch="EAGER" attribute-type="java.util.Map" target-class="Long">
<map-key-class class="String"/>
<map-key-convert>CreditCard</map-key-convert>
<map-key-column name="CARD"/>
<column name="NUMB"/>
<convert>Long2String</convert>
<object-type-converter name="CreditCard">
<conversion-value data-value="VI" object-value="Visa"/>
<conversion-value data-value="AM" object-value="Amex"/>
<conversion-value data-value="MC" object-value="Mastercard"/>
<conversion-value data-value="DI" object-value="DinersClub"/>
</object-type-converter>
<type-converter name="Long2String" data-type="String" object-type="Long"/>
<!-- Let the collection table default in this case (DynamicEmployee_CREDITCARDS) -->
</element-collection>
<element-collection name="creditLines" fetch="EAGER" attribute-type="java.util.Map" target-class="Long">
<map-key-class class="String"/>
<map-key-convert>CreditLine</map-key-convert>
<map-key-column name="BANK"/>
<column name="ACCOUNT"/>
<convert>Long2String</convert>
<object-type-converter name="CreditLine">
<conversion-value data-value="RBC" object-value="RoyalBank"/>
<conversion-value data-value="CIBC" object-value="CanadianImperial"/>
<conversion-value data-value="SB" object-value="Scotiabank"/>
<conversion-value data-value="TD" object-value="TorontoDominion"/>
</object-type-converter>
<collection-table name="DYNAMIC_EMP_CREDITLINES">
<join-column name="EMP_ID"/>
</collection-table>
</element-collection>
<embedded name="period" attribute-type="EmploymentPeriod">
<attribute-override name="startDate">
<column name="START_DATE" nullable="false"/>
</attribute-override>
<attribute-override name="endDate">
<column name="END_DATE" nullable="true"/>
</attribute-override>
</embedded>
</attributes>
</entity>
<entity name="DynamicAddress" class="Address">
<table name="DYNAMIC_ADDRESS"/>
<sequence-generator name="DYNAMIC_ADDRESS_SEQUENCE_GENERATOR" sequence-name="ADDRESS_SEQ" allocation-size="25"/>
<named-query name="findAllDynamicAddressesByPostalCode">
<query>SELECT OBJECT(address) FROM DynamicAddress address WHERE address.postalCode = :postalCode</query>
</named-query>
<named-native-query name="findAllDynamicAddresses" result-class="Address">
<query>SELECT * FROM DYNAMIC_ADDRESS</query>
</named-native-query>
<named-stored-procedure-query name="SProcDynamicAddress" result-class="Address" procedure-name="SProc_Read_DynamicAddress">
<parameter direction="IN_OUT" name="address_id_v" query-parameter="ADDRESS_ID" type="Integer"/>
<parameter direction="OUT" name="street_v" query-parameter="STREET" type="String"/>
<parameter direction="OUT" name="city_v" query-parameter="CITY" type="String"/>
<parameter direction="OUT" name="country_v" query-parameter="COUNTRY" type="String"/>
<parameter direction="OUT" name="province_v" query-parameter="PROVINCE" type="String"/>
<parameter direction="OUT" name="p_code_v" query-parameter="P_CODE" type="String"/>
</named-stored-procedure-query>
<named-stored-procedure-query name="SProcDynamicInOut" result-class="Address" procedure-name="SProc_Read_DynamicInOut">
<parameter direction="IN_OUT" name="address_id_v" query-parameter="ADDRESS_ID" type="Long"/>
<parameter direction="OUT" name="street_v" query-parameter="STREET" type="String"/>
</named-stored-procedure-query>
<attributes>
<id name="id" attribute-type="Integer">
<column name="ADDRESS_ID"/>
<generated-value strategy="SEQUENCE" generator="DYNAMIC_ADDRESS_SEQUENCE_GENERATOR"/>
</id>
<basic name="postalCode" attribute-type="String">
<column name="P_CODE"/>
</basic>
<basic name="street" attribute-type="String" />
<basic name="city" attribute-type="String" />
<basic name="province" attribute-type="String">
<convert>ProvinceConverter</convert>
<converter name="ProvinceConverter" class="ProvinceConverter"/>
</basic>
<basic name="country" attribute-type="String" />
</attributes>
</entity>
<!-- Don't support Composite Primary keys yet using IdClass -->
<!-- entity name="DynamicPhoneNumber" class="PhoneNumber">
<table name="DYNAMIC_PHONENUMBER"/>
<id-class class="PhoneNumberPK"/>
<attributes>
<id name="id">
<column name="OWNER_ID" insertable="false" updatable="false"/>
</id>
<id name="type">
<column name="TYPE"/>
</id>
<basic name="number">
<column name="NUMB"/>
</basic>
<basic name="areaCode">
<column name="AREA_CODE"/>
</basic>
<many-to-one name="owner" target-entity="Employee">
<join-column name="OWNER_ID" referenced-column-name="EMP_ID"/>
</many-to-one>
</attributes>
</entity -->
<entity name="DynamicLargeProject" class="LargeProject" existence-checking="ASSUME_NON_EXISTENCE" parent-class="Project">
<table name="DYNAMIC_LPROJECT"/>
<discriminator-value>L</discriminator-value>
<named-query name="findDynamicLargeProjectWithBudgetLargerThan">
<query>SELECT OBJECT(project) FROM DynamicLargeProject project WHERE project.budget >= :amount</query>
</named-query>
<attributes>
<basic name="budget" attribute-type="Double"/>
</attributes>
</entity>
<entity name="DynamicSmallProject" class="SmallProject" existence-checking="ASSUME_EXISTENCE" parent-class="Project">
<table name="DYNAMIC_PROJECT"/>
<discriminator-value>S</discriminator-value>
</entity>
<entity name="DynamicProject" class="Project" existence-checking="CHECK_CACHE">
<change-tracking type="OBJECT"/>
<table name="DYNAMIC_PROJECT"/>
<inheritance strategy="JOINED"/>
<discriminator-value>P</discriminator-value>
<discriminator-column name="PROJ_TYPE"/>
<optimistic-locking type="SELECTED_COLUMNS">
<selected-column name="VERSION"/>
</optimistic-locking>
<sequence-generator name="DYNAMIC_PROJECT_SEQUENCE_GENERATOR" sequence-name="PROJECT_SEQ" allocation-size="10"/>
<named-query name="findDynamicProjectByName">
<query>SELECT OBJECT(project) FROM DynamicProject project WHERE project.name = :name</query>
</named-query>
<attributes>
<id name="id" attribute-type="Integer">
<column name="PROJ_ID"/>
<generated-value strategy="SEQUENCE" generator="DYNAMIC_PROJECT_SEQUENCE_GENERATOR"/>
</id>
<basic name="name" attribute-type="String">
<column name="PROJ_NAME"/>
</basic>
<basic name="description" attribute-type="String">
<column name="DESCRIP"/>
</basic>
<version name="version" attribute-type="Integer">
<column name="VERSION"/>
</version>
<one-to-one name="teamLeader" target-entity="Employee">
<join-column name="LEADER_ID"/>
</one-to-one>
<many-to-many name="teamMembers" target-entity="Employee" mapped-by="projects" attribute-type="java.util.Collection"/>
</attributes>
</entity>
<entity name="DynamicReadOnlyClass" class="ReadOnlyClass" read-only="true">
<table name="DYNAMIC_READONLY"/>
<attributes>
<id name="id" attribute-type="Integer"/>
</attributes>
</entity>
<entity name="DynamicShovel" class="Shovel">
<table name="DYNAMIC_SHOVEL"/>
<table-generator name="DYNAMIC_SHOVEL_TABLE_GENERATOR" table="DYNAMIC_EMPLOYEE_SEQ" pk-column-name="SEQ_NAME" value-column-name="SEQ_COUNT" pk-column-value="DYNAMIC_SHOVEL_SEQ"/>
<attributes>
<id name="id" attribute-type="Integer">
<column name="ID"/>
<generated-value strategy="TABLE" generator="DYNAMIC_SHOVEL_TABLE_GENERATOR"/>
</id>
<basic name="cost" attribute-type="Double">
<column name="COST"/>
</basic>
<version name="version" attribute-type="Integer">
<column name="VERSION"/>
</version>
<many-to-one name="owner" target-entity="ShovelOwner">
<join-column name="OWNER_ID"/>
<cascade>
<cascade-all/>
</cascade>
</many-to-one>
<one-to-many name="operators" target-entity="ShovelDigger" mapped-by="shovel" attribute-type="java.util.List">
<cascade>
<cascade-all/>
</cascade>
</one-to-many>
<many-to-many name="projects" target-entity="ShovelProject" attribute-type="java.util.List">
<join-table name="DYNAMIC_SHOVEL_PROJECTS">
<join-column name="SHOVEL_ID" referenced-column-name="ID"/>
<inverse-join-column name="PROJECT_ID" referenced-column-name="ID"/>
</join-table>
<cascade>
<cascade-persist/>
</cascade>
</many-to-many>
<embedded name="sections" attribute-type="ShovelSections"/>
</attributes>
</entity>
<entity name="DynamicShovelDigger" class="ShovelDigger">
<table name="DYNAMIC_SHOVEL_DIGGER"/>
<table-generator name="DYNAMIC_SHOVEL_DIGGER_TABLE_GENERATOR" table="DYNAMIC_EMPLOYEE_SEQ" pk-column-name="SEQ_NAME" value-column-name="SEQ_COUNT" pk-column-value="DYNAMIC_SHOVEL_DIGGER_SEQ"/>
<attributes>
<id name="id" attribute-type="Integer">
<column name="ID"/>
<generated-value strategy="TABLE" generator="DYNAMIC_SHOVEL_OWNER_TABLE_GENERATOR"/>
</id>
<basic name="name" attribute-type="String">
<column name="DIGGER_NAME"/>
</basic>
<one-to-one name="shovel" target-entity="Shovel">
<join-column name="SHOVEL_ID"/>
<access-methods get-method="getX" set-method="setX"/>
</one-to-one>
</attributes>
</entity>
<entity name="DynamicShovelOwner" class="ShovelOwner">
<table name="DYNAMIC_SHOVEL_OWNER"/>
<table-generator name="DYNAMIC_SHOVEL_OWNER_TABLE_GENERATOR" table="DYNAMIC_EMPLOYEE_SEQ" pk-column-name="SEQ_NAME" value-column-name="SEQ_COUNT" pk-column-value="DYNAMIC_SHOVEL_OWNER_SEQ"/>
<attributes>
<id name="id" attribute-type="Integer">
<column name="ID"/>
<generated-value strategy="TABLE" generator="DYNAMIC_SHOVEL_OWNER_TABLE_GENERATOR"/>
</id>
<basic name="name" attribute-type="String">
<column name="OWNER_NAME"/>
</basic>
</attributes>
</entity>
<entity name="DynamicShovelProject" class="ShovelProject">
<access-methods get-method="get" set-method="set"/>
<table name="DYNAMIC_SHOVEL_PROJECT"/>
<table-generator name="DYNAMIC_SHOVEL_PROJECT_TABLE_GENERATOR" table="DYNAMIC_EMPLOYEE_SEQ" pk-column-name="SEQ_NAME" value-column-name="SEQ_COUNT" pk-column-value="DYNAMIC_SHOVEL_PROJECT_SEQ"/>
<attributes>
<id name="id" attribute-type="Integer">
<column name="ID"/>
<generated-value strategy="TABLE" generator="DYNAMIC_SHOVEL_PROJECT_TABLE_GENERATOR"/>
</id>
<basic name="description" attribute-type="String">
<column name="DESCRIP"/>
</basic>
<many-to-many name="shovels" target-entity="Shovel" mapped-by="projects" attribute-type="java.util.List"/>
</attributes>
</entity>
<entity name="DynamicWalker" class="Walker">
<table name="DYNAMIC_WALKER"/>
<id-class class="DynamicWalkerPK"/>
<attributes>
<id name="id" attribute-type="Integer">
<column name="ID"/>
<generated-value/>
</id>
<id name="style" attribute-type="java.lang.String" />
<basic name="name" attribute-type="java.lang.String"/>
</attributes>
</entity>
<entity name="DynamicRunner" class="Runner">
<table name="DYNAMIC_RUNNER"/>
<attributes>
<embedded-id name="id" attribute-type="DynamicRunnerPK"/>
<basic name="name" attribute-type="java.lang.String"/>
</attributes>
</entity>
<embeddable class="DynamicRunnerPK">
<attributes>
<basic name="bib" attribute-type="int"/>
<basic name="worldRank" attribute-type="int"/>
</attributes>
</embeddable>
<embeddable class="ShovelSections">
<access-methods get-method="getMaterial" set-method="setMaterial"/>
<attributes>
<!-- Can't handle enums right now -->
<!-- basic name="handle" attribute-type="ShovelSections$MaterialType"/ -->
<!-- basic name="shaft" attribute-type="ShovelSections$MaterialType"/ -->
<!-- basic name="scoop" attribute-type="ShovelSections$MaterialType"/ -->
<basic name="handle" attribute-type="String"/>
<basic name="shaft" attribute-type="String"/>
<basic name="scoop" attribute-type="String"/>
</attributes>
</embeddable>
<embeddable class="EmploymentPeriod">
<attributes>
<basic name="startDate" attribute-type="java.util.Date">
<column name="S_DATE"/>
<temporal>DATE</temporal>
</basic>
<basic name="endDate" attribute-type="java.util.Date">
<column name="E_DATE"/>
<temporal>DATE</temporal>
</basic>
</attributes>
</embeddable>
</entity-mappings>