Saya akan menyarankan pendekatan yang berbeda meskipun itu pertanyaan yang agak lama. Alih-alih membuat dua entitas, Anda harus membuat tiga.
Buat FileMetadata, yang menyimpan nama, mimetype, dll. Buat FileContent, yang menyimpan konten. Kemudian, buat File entitas ketiga yang menyimpan koneksi satu-ke-satu dengan salah satu dari masing-masing jenis lainnya, dan berikan sekelompok metode yang hanya memanggil metode yang cocok pada sub entitas.
Jadi misalnya di File, metode setName akan terlihat seperti ini:
public function setName() {
$this->getFileMetadata()->getName();
}
Dan set akan terlihat seperti ini:
public function setName( $name ) {
$this->getFileMetadata()->setName( $name );
}
Konstruktor entitas File harus membuat FileMetadata baru dan FileContent baru saat pembuatan dan TIDAK boleh memiliki metode setFilemetadata atau setFilecontent; kedua entitas ini harus dilindungi sepenuhnya dari aplikasi Anda.
Sekarang Anda memiliki entitas File, yang menangani persis seperti yang Anda inginkan (satu entitas, tidak ada sub-entitas tambahan) yang masih tersimpan rapi di dua (well, tiga benar-benar) tabel yang berbeda.