/**
 * Example for persistence with the "mapped superclass" strategy
 * 
 * The "mapped superclass" strategy means that no database table is created for the
 * parent in an inheritance situation between entities.
 * 
 * The parent's fields are inherited by the children and included as columns
 * in their tables as if they had been declared in the child entity.
 */
package org.eclipse.osbp.entitydsl.samples.sample05.dtos {
	
	/* Imports the required artifacts */
	import org.eclipse.osbp.entitydsl.samples.sample05.*;
	import org.eclipse.osbp.entitydsl.samples.sample05.dtos.*;
	import org.eclipse.osbp.entitydsl.samples.sample05.dtos.mapper.*;


	autoDto ItemDto wraps Item {
		inherit var id;
		inherit var name;
		inherit var count;
	}
	
	autoDto ArticleDto extends ItemDto wraps Article {
		inherit var description;
		inherit var price;
	}
	
}
