Jag kommer att föreslå ett annat tillvägagångssätt även om det är en något äldre fråga. Istället för att göra två enheter bör du göra tre.
Skapa FileMetadata, som innehåller namn, mimetyp, etc. Skapa FileContent, som innehåller innehållet. Skapa sedan en tredje enhetsfil som har en en-till-en-koppling med en av var och en av de andra typerna, och ge den ett gäng metoder som helt enkelt anropar matchningsmetoderna på underentiteterna.
Så till exempel i File, skulle setName-metoden se ut så här:
public function setName() {
$this->getFileMetadata()->getName();
}
Och set skulle se ut så här:
public function setName( $name ) {
$this->getFileMetadata()->setName( $name );
}
Konstruktören av File-entiteten bör skapa en ny FileMetadata och en ny FileContent vid skapandet och bör INTE ha en setFilemetadata- eller setFilecontent-metod; dessa två enheter bör vara helt skyddade från din ansökan.
Nu har du fil-entiteten, som hanterar precis som du vill (en enstaka enhet, inga ytterligare sub-entiteter) som fortfarande lagras snyggt i två (tja, tre verkligen) olika tabeller.