少し古い質問ですが、別のアプローチを提案します。 2つのエンティティを作成する代わりに、3つのエンティティを作成する必要があります。
名前、mimetypeなどを保持するFileMetadataを作成します。コンテンツを保持するFileContentを作成します。次に、他の各タイプの1つと1対1の接続を保持する3番目のエンティティファイルを作成し、サブエンティティの一致するメソッドを呼び出すだけの一連のメソッドを指定します。
したがって、たとえばFileの場合、setNameメソッドは次のようになります。
public function setName() {
$this->getFileMetadata()->getName();
}
セットは次のようになります:
public function setName( $name ) {
$this->getFileMetadata()->setName( $name );
}
Fileエンティティのコンストラクターは、作成時に新しいFileMetadataと新しいFileContentを作成する必要があり、setFilemetadataまたはsetFilecontentメソッドを持たないようにする必要があります。これらの2つのエンティティは、アプリケーションから完全に保護する必要があります。
これで、Fileエンティティができました。これは、2つ(実際には3つ)の異なるテーブルに適切に格納された、希望どおりに処理されます(単一のエンティティ、追加のサブエンティティはありません)。