Navrhnu jiný přístup, i když je to poněkud starší otázka. Místo vytváření dvou entit byste měli vytvořit tři.
Vytvořte FileMetadata, která obsahují název, mimetype atd. Vytvořte FileContent, která obsahuje obsah. Poté vytvořte soubor třetí entity, který udržuje spojení jedna ku jedné s jedním z ostatních typů, a dejte mu spoustu metod, které jednoduše volají odpovídající metody na dílčích entitách.
Takže například v File by metoda setName vypadala takto:
public function setName() {
$this->getFileMetadata()->getName();
}
A sada by vypadala takto:
public function setName( $name ) {
$this->getFileMetadata()->setName( $name );
}
Konstruktor entity File by měl při vytváření vytvořit nová FileMetadata a nový FileContent a NEMĚL by mít metodu setFilemetadata nebo setFilecontent; tyto dvě entity by měly být před vaší aplikací zcela chráněny.
Nyní máte entitu File, která pracuje přesně tak, jak chcete (jedna entita, žádné další podřízené entity), která je stále úhledně uložena ve dvou (dobře, třech opravdu) různých tabulkách.