<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
	"-//Hibernate/Hibernate Mapping DTD//EN"
	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >

<hibernate-mapping package="com.bd.movie.domain" >
  <class name="com.bd.movie.domain.Engagement" 
         table="ENGAGEMENT">
    <id name="id" >
      <generator class="native" />
    </id>
    <property name="UUIDString" />
    <property name="role" />
  
    <many-to-one name="person" column="PERSON_ID" 
      class="com.bd.movie.domain.Person" />
  
    <many-to-one name="media" column="MEDIA_ID" 
      class="com.bd.movie.domain.Media" />
  </class>
  
  <class name="com.bd.movie.domain.Library" 
         table="LIBRARY">
    <id name="id" >
      <generator class="native" />
    </id>
    <property name="name" />
  
    <set name="media" 
      lazy="false" 
      inverse="true"
      cascade="all">
        <!-- use cascade="cascade-delete-orphan" to delete children when parent is deleted -->
        <key column="LIBRARY_ID" />
        <one-to-many class="com.bd.movie.domain.PhysicalMedia" />
    </set>
  </class>
  
  <class name="com.bd.movie.domain.Media" 
         table="MEDIA">
    <id name="id" >
      <generator class="native" />
    </id>
    <discriminator column="MEDIA_TYPE" type="string" />
    <property name="UUIDString" />
    <property name="title" />
  
    <set name="engagements" 
      lazy="false" 
      inverse="true"
      cascade="all">
        <!-- use cascade="cascade-delete-orphan" to delete children when parent is deleted -->
        <key column="MEDIA_ID" />
        <one-to-many class="com.bd.movie.domain.Engagement" />
    </set>
  
    <set name="characters" 
      table="MEDIA_MEDIACHARACTER"
      lazy="false" 
      cascade="all">
        <key column="MEDIA_ID" />
        <many-to-many
          column="MEDIACHARACTER_ID" 
          class="com.bd.movie.domain.MediaCharacter" />
    </set>
  
    <set name="physicalMedia" 
      table="MEDIA_PHYSICALMEDIA"
      lazy="false" 
      cascade="all">
        <key column="MEDIA_ID" />
        <many-to-many
          column="PHYSICALMEDIA_ID" 
          class="com.bd.movie.domain.PhysicalMedia" />
    </set>
  
    <joined-subclass name="com.bd.movie.domain.Book" 
         table="BOOK">
       <key column="MEDIA_ID" />
       <property name="isbn" />
    </joined-subclass>
  
    <joined-subclass name="com.bd.movie.domain.Movie" 
         table="MOVIE">
       <key column="MEDIA_ID" />
       <property name="urlIMDB" />
       <property name="playLength" />
    </joined-subclass>
  </class>
  
  <class name="com.bd.movie.domain.MediaCharacter" 
         table="MEDIACHARACTER">
    <id name="id" >
      <generator class="native" />
    </id>
    <property name="UUIDString" />
    <property name="name" />
  
    <set name="existsInMedia"
      inverse="true" 
      table="MEDIA_MEDIACHARACTER"
      lazy="false" 
      cascade="all">
        <key column="MEDIACHARACTER_ID" />
        <many-to-many
          column="MEDIA_ID" 
          class="com.bd.movie.domain.Media" />
    </set>
  
    <set name="playedBy" 
      table="MEDIACHARACTER_PERSON"
      lazy="false" 
      cascade="all">
        <key column="MEDIACHARACTER_ID" />
        <many-to-many
          column="PERSON_ID" 
          class="com.bd.movie.domain.Person" />
    </set>
  </class>
  
  <class name="com.bd.movie.domain.Person" 
         table="PERSON">
    <id name="id" >
      <generator class="native" />
    </id>
    <property name="name" />
    <property name="age" />
    <property name="ssn" />
  
    <set name="engagements" 
      lazy="false" 
      inverse="true"
      cascade="all">
        <!-- use cascade="cascade-delete-orphan" to delete children when parent is deleted -->
        <key column="PERSON_ID" />
        <one-to-many class="com.bd.movie.domain.Engagement" />
    </set>
  
    <set name="plays"
      inverse="true" 
      table="MEDIACHARACTER_PERSON"
      lazy="false" 
      cascade="all">
        <key column="PERSON_ID" />
        <many-to-many
          column="MEDIACHARACTER_ID" 
          class="com.bd.movie.domain.MediaCharacter" />
    </set>
  </class>
  
  <class name="com.bd.movie.domain.PhysicalMedia" 
         table="PHYSICALMEDIA">
    <id name="id" >
      <generator class="native" />
    </id>
    <property name="UUIDString" />
    <property name="status" />
    <property name="location" />
  
    <many-to-one name="library" column="LIBRARY_ID" 
      class="com.bd.movie.domain.Library" />
  
    <set name="media"
      inverse="true" 
      table="MEDIA_PHYSICALMEDIA"
      lazy="false" 
      cascade="all">
        <key column="PHYSICALMEDIA_ID" />
        <many-to-many
          column="MEDIA_ID" 
          class="com.bd.movie.domain.Media" />
    </set>
  </class>
  

</hibernate-mapping>