<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE jbosscmp-jdbc PUBLIC
   "-//JBoss//DTD JBOSSCMP-JDBC 3.2//EN"
   "http://www.jboss.org/j2ee/dtd/jbosscmp-jdbc_3_2.dtd">
<jbosscmp-jdbc>
   <defaults>
      <remove-table>true</remove-table>
      <read-ahead><strategy>none</strategy></read-ahead>
      <list-cache-max>0</list-cache-max>
      <fetch-size>100</fetch-size>
   </defaults>
   <enterprise-beans>
      <entity>
         <ejb-name>UserEJB</ejb-name>
         <fetch-size>1000</fetch-size>
         <table-name>USER_DATA</table-name>
         <cmp-field>
            <field-name>userId</field-name>
            <column-name>USER_ID</column-name>
         </cmp-field>
         <cmp-field>
            <field-name>userName</field-name>
            <column-name>USER_NAME</column-name>
         </cmp-field>
         <cmp-field>
            <field-name>email</field-name>
            <column-name>EMAIL</column-name>
         </cmp-field>
         <cmp-field>
            <field-name>sendSpam</field-name>
            <column-name>SEND_SPAM</column-name>
         </cmp-field>
         <load-groups>
            <load-group>
               <load-group-name>basic</load-group-name>
               <field-name>userName</field-name>
            </load-group>
            <load-group>
               <load-group-name>email options</load-group-name>
               <field-name>email</field-name>
               <field-name>sendSpam</field-name>
            </load-group>
         </load-groups>
         <eager-load-group>basic</eager-load-group>
         <lazy-load-groups>
            <load-group-name>email options</load-group-name>
         </lazy-load-groups>
         <query>
            <description>select all the user ids</description>
            <query-method>
               <method-name>ejbSelectUserIds</method-name>
               <method-params/>
            </query-method>
            <declared-sql>
               <select>
                  <distinct/>
                  <ejb-name>UserEJB</ejb-name>
                  <field-name>userId</field-name>
               </select>
               <order>USER_ID</order>
            </declared-sql>
         </query>
         <query>
            <description>
               Find the user with the specified name.
            </description>
            <query-method>
               <method-name>findByUserName</method-name>
               <method-params>
                  <method-param>java.lang.String</method-param>
               </method-params>
            </query-method>
            <declared-sql>
               <select>
                  <distinct/>
               </select>
               <where>USER_NAME = {0}</where>
               <order>USER_ID</order>
            </declared-sql>
         </query>
         <query>
            <description>
               Find the user with the specified name.
            </description>
            <query-method>
               <method-name>findAllByUserName</method-name>
               <method-params>
                  <method-param>java.lang.String</method-param>
               </method-params>
            </query-method>
            <declared-sql>
               <select>
                  <distinct/>
                  <additional-columns>, USER_NAME</additional-columns>
               </select>
               <where>USER_NAME = {0}</where>
               <order>USER_NAME</order>
            </declared-sql>
         </query>
      </entity>
      <entity>
         <ejb-name>OrderEJB</ejb-name>
         <table-name>ORDER_DATA</table-name>
         <cmp-field>
            <field-name>ordernumber</field-name>
            <column-name>ORDER_NUMBER</column-name>
         </cmp-field>
         <cmp-field>
            <field-name>orderStatus</field-name>
            <column-name>ORDER_STATUS</column-name>
            <jdbc-type>VARCHAR</jdbc-type>
            <sql-type>VARCHAR(50)</sql-type>
         </cmp-field>
         <cmp-field>
            <field-name>creditCard</field-name>
            <column-name>CC</column-name>
            
            <property>
               <property-name>cardHolder.first</property-name>
               <column-name>CC_FIRST_NAME</column-name>
               <jdbc-type>VARCHAR</jdbc-type>
               <sql-type>VARCHAR(100)</sql-type>
            </property>
            <property>
               <property-name>cardHolder.mi</property-name>
               <column-name>CC_MI</column-name>
            </property>
            <property>
               <property-name>cardHolder.last</property-name>
               <column-name>CC_LAST_NAME</column-name>
            </property>
            <!-- the rest of the properties can be default -->
         </cmp-field>
         <query>
            <query-method>
               <method-name>ejbSelectGeneric</method-name>
               <method-params>
                  <method-param>java.lang.String</method-param>
                  <method-param>java.lang.Object[]</method-param>
               </method-params>
            </query-method>
            <dynamic-ql/>
         </query>
         <query>
            <query-method>
               <method-name>ejbSelectLazy</method-name>
               <method-params>
                  <method-param>java.lang.String</method-param>
                  <method-param>java.lang.Object[]</method-param>
               </method-params>
            </query-method>
            <dynamic-ql/>
            <lazy-resultset-loading>true</lazy-resultset-loading>
         </query>
         <query>
            <description>Search all orders shipped to CA</description>
            <query-method>
               <method-name>ejbSelectOrdersShippedToCA2</method-name>
               <method-params>
               </method-params>
            </query-method>
            <declared-sql>
               <select>
                  <distinct/>
                  <ejb-name>OrderEJB</ejb-name>
               </select>
               <from>, AddressEJB as a</from>
               <where>ORDER_DATA.SHIPPING_ADDRESS=a.id AND a.state='CA'</where>
            </declared-sql>
         </query>
         <query>
            <description>Search all states orders have been shipped to</description>
            <query-method>
               <method-name>ejbSelectOrderShipToStates2</method-name>
               <method-params>
               </method-params>
            </query-method>
            <!--
            <jboss-ql>
               SELECT o.shippingAddress.state
               FROM OrderX o
            </jboss-ql>
            -->
            <declared-sql>
               <select>
                  <ejb-name>AddressEJB</ejb-name>
                  <field-name>state</field-name>
               </select>
               <from>, ORDER_DATA as o</from>
               <where>o.SHIPPING_ADDRESS=AddressEJB.id</where>
            </declared-sql>
         </query>
         <query>
            <description>Gets all known addresses in CA</description>
            <query-method>
               <method-name>ejbSelectAddressesInCA2</method-name>
               <method-params>
               </method-params>
            </query-method>
            <!--
            <jboss-ql>
               SELECT DISTINCT Object(a)
               FROM Address a
               WHERE a.state='CA'
            </jboss-ql>
            -->
            <declared-sql>
               <select>
                  <distinct/>
                  <ejb-name>AddressEJB</ejb-name>
               </select>
               <where>state='CA'</where>
            </declared-sql>
         </query>
         <query>
            <query-method>
               <method-name>findWithLimitOffset</method-name>
               <method-params>
                  <method-param>int</method-param>
                  <method-param>int</method-param>
               </method-params>
            </query-method>
            <jboss-ql>SELECT OBJECT(o) FROM OrderX o OFFSET ?1 LIMIT ?2</jboss-ql>
         </query>
      </entity>
      <entity>
         <ejb-name>ProductEJB</ejb-name>
         <table-name>PRODUCT</table-name>
         <load-groups>
            <load-group>
               <load-group-name>basic</load-group-name>
               <field-name>name</field-name>
               <field-name>type</field-name>
            </load-group>
            <load-group>
               <load-group-name>pricing info</load-group-name>
               <field-name>unit</field-name>
               <field-name>costPerUnit</field-name>
               <field-name>weight</field-name>
            </load-group>
            <load-group>
               <load-group-name>shipping info</load-group-name>
               <field-name>weight</field-name>
               <field-name>length</field-name>
               <field-name>girth</field-name>
            </load-group>
         </load-groups>
         <eager-load-group>basic</eager-load-group>
         <lazy-load-groups>
            <load-group-name>basic</load-group-name>
            <load-group-name>pricing info</load-group-name>
            <load-group-name>shipping info</load-group-name>
         </lazy-load-groups>
      </entity>
      <entity>
         <ejb-name>AutoNumberEJB</ejb-name>
         <table-name>autonumber</table-name>
         <cmp-field>
            <field-name>name</field-name>
            <column-name>name</column-name>
         </cmp-field>
         <cmp-field>
            <field-name>value</field-name>
            <column-name>value</column-name>
         </cmp-field>
      </entity>
   </enterprise-beans>
   <relationships>
      <ejb-relation>
         <ejb-relation-name>Customer-User</ejb-relation-name>
         <foreign-key-mapping/>
         <ejb-relationship-role>
            <ejb-relationship-role-name>customer.getUser()</ejb-relationship-role-name>
            <key-fields/>
         </ejb-relationship-role>
         <ejb-relationship-role>
            <ejb-relationship-role-name>user.getCustomer()</ejb-relationship-role-name>
            <key-fields>
               <key-field>
                  <field-name>userId</field-name>
                  <column-name>USER_ID</column-name>
               </key-field>
            </key-fields>
         </ejb-relationship-role>
      </ejb-relation>
      <ejb-relation>
         <ejb-relation-name>Order-LineItem</ejb-relation-name>
         <foreign-key-mapping/>
         <ejb-relationship-role>
            <ejb-relationship-role-name>order.getLineitems()</ejb-relationship-role-name>
            <key-fields>
               <key-field>
                  <field-name>ordernumber</field-name>
                  <column-name>ORDER_NUMBER</column-name>
               </key-field>
            </key-fields>
         </ejb-relationship-role>
         <ejb-relationship-role>
            <ejb-relationship-role-name>lineitem.getOrder()</ejb-relationship-role-name>
            <key-fields/>
         </ejb-relationship-role>
      </ejb-relation>
      <ejb-relation>
         <ejb-relation-name>Product-ProductCategory</ejb-relation-name>
         <relation-table-mapping>
            <table-name>PRODUCT_PRODUCT_CATEGORY</table-name>
         </relation-table-mapping>
         <ejb-relationship-role>
            <ejb-relationship-role-name>product.getProductCategories()</ejb-relationship-role-name>
            <key-fields>
               <key-field>
                  <field-name>id</field-name>
                  <column-name>PRODUCT_ID</column-name>
               </key-field>
            </key-fields>
         </ejb-relationship-role>
         <ejb-relationship-role>
            <ejb-relationship-role-name>productCategories.getProducts()</ejb-relationship-role-name>
            <key-fields>
               <key-field>
                  <field-name>id</field-name>
                  <column-name>PRODUCT_CATEGORY_ID</column-name>
               </key-field>
               <key-field>
                  <field-name>subId</field-name>
                  <column-name>PRODUCT_CATEGORY_SUBID</column-name>
               </key-field>
            </key-fields>
         </ejb-relationship-role>
      </ejb-relation>
      <ejb-relation>
         <ejb-relation-name>Customer-Addresses</ejb-relation-name>
         <relation-table-mapping>
            <table-name>CUSTOMER_ADDRESS</table-name>
            <create-table>true</create-table>
         </relation-table-mapping>
         <ejb-relationship-role>
            <ejb-relationship-role-name>customer.getAddresses()</ejb-relationship-role-name>
            <key-fields>
               <key-field>
                  <field-name>id</field-name>
                  <column-name>CUSTOMER</column-name>
               </key-field>
            </key-fields>
         </ejb-relationship-role>
         <ejb-relationship-role>
            <ejb-relationship-role-name>address.getCustomer()</ejb-relationship-role-name>
            <key-fields>
               <key-field>
                  <field-name>id</field-name>
                  <column-name>ADDRESS</column-name>
               </key-field>
            </key-fields>
         </ejb-relationship-role>
      </ejb-relation>
      <ejb-relation>
         <ejb-relation-name>Order-ShippingAddress</ejb-relation-name>
         <foreign-key-mapping/>
         <ejb-relationship-role>
            <ejb-relationship-role-name>order.getShippingAddress()</ejb-relationship-role-name>
            <key-fields/>
         </ejb-relationship-role>
         <ejb-relationship-role>
            <ejb-relationship-role-name>shippingAddress.getOrder()</ejb-relationship-role-name>
            <key-fields>
               <key-field>
                  <field-name>id</field-name>
                  <column-name>SHIPPING_ADDRESS</column-name>
               </key-field>
            </key-fields>
         </ejb-relationship-role>
      </ejb-relation>
      <ejb-relation>
         <ejb-relation-name>Order-BillingAddress</ejb-relation-name>
         <foreign-key-mapping/>
         <ejb-relationship-role>
            <ejb-relationship-role-name>order.getBillingAddress()</ejb-relationship-role-name>
            <key-fields/>
         </ejb-relationship-role>
         <ejb-relationship-role>
            <ejb-relationship-role-name>billingAddress.getOrder()</ejb-relationship-role-name>
            <key-fields>
               <key-field>
                  <field-name>id</field-name>
                  <column-name>BILLING_ADDRESS</column-name>
               </key-field>
            </key-fields>
         </ejb-relationship-role>
      </ejb-relation>

      <!-- Batch cascade-delete -->
      <ejb-relation>
         <ejb-relation-name>ProductCategory-Subcategories-BatchDelete</ejb-relation-name>
         <ejb-relationship-role>
            <ejb-relationship-role-name>parent.getSubcategories()</ejb-relationship-role-name>
            <key-fields>
               <key-field>
                  <field-name>id</field-name>
                  <column-name>PARENT_FK</column-name>
               </key-field>
               <key-field>
                  <field-name>subId</field-name>
                  <column-name>PARENT_SUBFK</column-name>
               </key-field>
            </key-fields>
         </ejb-relationship-role>
         <ejb-relationship-role>
            <ejb-relationship-role-name>subcategory.getParent()</ejb-relationship-role-name>
            <fk-constraint>false</fk-constraint>
            <key-fields/>
            <batch-cascade-delete/>
         </ejb-relationship-role>
      </ejb-relation>
      <ejb-relation>
         <ejb-relation-name>ProductCategory-ProductCategoryType-BatchDelete</ejb-relation-name>
         <ejb-relationship-role>
            <ejb-relationship-role-name>type.getProductCategories()</ejb-relationship-role-name>
            <key-fields>
               <key-field>
                  <field-name>id</field-name>
                  <column-name>TYPE_FK</column-name>
               </key-field>
            </key-fields>
         </ejb-relationship-role>
         <ejb-relationship-role>
            <ejb-relationship-role-name>productCategory.getType()</ejb-relationship-role-name>
            <fk-constraint>true</fk-constraint>
            <key-fields/>
           <batch-cascade-delete/>
         </ejb-relationship-role>
      </ejb-relation>
   </relationships>

   <dependent-value-classes>
      <dependent-value-class>
         <description>Formal Name</description>
         <class>org.jboss.test.cmp2.commerce.FormalName</class>
         <property>
            <property-name>first</property-name>
            <column-name>FIRST</column-name>
         </property>
         <property>
            <property-name>mi</property-name>
            <column-name>MI</column-name>
         </property>
         <property>
            <property-name>last</property-name>
            <column-name>LAST</column-name>
         </property>
      </dependent-value-class>
      <dependent-value-class>
         <description>Credit Card</description>
         <class>org.jboss.test.cmp2.commerce.Card</class>
         <property>
            <property-name>type</property-name>
            <column-name>TYPE</column-name>
         </property>
         <property>
            <!-- type FormalName -->
            <property-name>cardHolder</property-name>
            <column-name>CARD_HOLDER</column-name>
         </property>
         <property>
            <property-name>billingZip</property-name>
            <column-name>BILLING_ZIP</column-name>
         </property>
         <property>
            <property-name>cardNumber</property-name>
            <column-name>CARD_NUMBER</column-name>
         </property>
      </dependent-value-class>
   </dependent-value-classes>
</jbosscmp-jdbc>
