<?xml version="1.0" encoding="UTF-8"?>

<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping
                          http://www.doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
                              
    <entity name="Doctrine\Tests\Models\Company\CompanyPerson" table="company_persons" inheritance-type="JOINED">

        <discriminator-map >
            <discriminator-mapping value="person"   class="CompanyPerson" />
            <discriminator-mapping value="manager"  class="CompanyManager" />
            <discriminator-mapping value="employee" class="CompanyEmployee" />
        </discriminator-map>

        <named-native-queries>
            <named-native-query name="fetchAllWithResultClass" result-class="__CLASS__">
                <query>SELECT id, name, discr FROM company_persons ORDER BY name</query>
            </named-native-query>
            
            <named-native-query name="fetchAllWithSqlResultSetMapping" result-set-mapping="mappingFetchAll">
                <query>SELECT id, name, discr AS discriminator FROM company_persons ORDER BY name</query>
            </named-native-query>
        </named-native-queries>

        <sql-result-set-mappings>
            <sql-result-set-mapping name="mappingFetchAll">
                <entity-result entity-class="__CLASS__" discriminator-column="discriminator">
                    <field-result name="id"/>
                    <field-result name="name"/>
                </entity-result>
            </sql-result-set-mapping>
        </sql-result-set-mappings>
        
        <id name="id" type="integer" column="id">
            <generator strategy="AUTO"/>
        </id>
        
        <field name="name" column="name"/>
        
        <one-to-one field="spouse" target-entity="CompanyPerson">
            <join-column name="spouse_id" referenced-column-name="id"/>
        </one-to-one>
        
        <many-to-many field="friends" target-entity="CompanyPerson">
            <join-table name="company_persons_friends">
                <join-columns>
                    <join-column name="person_id" referenced-column-name="id"/>
                </join-columns>
                <inverse-join-columns>
                    <join-column name="friend_id" referenced-column-name="id"/>
                </inverse-join-columns>
            </join-table>
        </many-to-many>
    </entity>

</doctrine-mapping>