Así es.
Te pego un ejemplo que estoy desarrollando de un sistema para educación
Un establecimiento educativo funciona en uno o más edificios y en un edificio pueden funcionar uno o más establecimientos educativos.
Las clases son las siguientes:
<?php
namespace Fd\EstablecimientoBundle\Entity;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\Validator\Constraints\NotBlank;
use Doctrine\ORM\Mapping as ORM;
/**
* Fd\EstablecimientoBundle\Entity\Establecimiento
*
* @ORM\Table(name="establecimiento")
* @ORM\Entity(repositoryClass="Fd\EstablecimientoBundle\Repository\EstablecimientoRepository")
* @ORM\HasLifecycleCallbacks()
*/
class Establecimiento {
/**
* @var integer $id
*
* @ORM\Column(name="id", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string $cue
*
* @ORM\Column(name="cue", type="string", length=7, nullable=true)
*/
private $cue;
/**
* bidireccional lado inverso
* @ORM\OneToMany(targetEntity="Fd\EstablecimientoBundle\Entity\EstablecimientoEdificio", mappedBy="establecimientos")
* @Assert\NotBlank(message="El dato no puede quedar en blanco")
*/
private $edificio;
/**
* @ORM\ManyToOne(targetEntity="Fd\TablaBundle\Entity\TipoEstablecimiento")
*/
private $tipo_establecimiento;
/**
*
* @ORM\Column(type="string", length=7, nullable=true)
*/
private $codigo_previo_transferencia;
/**
* @var string $nombre
*
* @ORM\Column(name="nombre", type="string", length=80, nullable=true)
*/
private $nombre;
/**
* @ORM\Column(length=25, nullable=true)
*/
private $apodo;
/**
* @var string $numero
*
* @ORM\Column(name="numero", type="integer", length=2, nullable=true)
*/
private $numero;
/**
* @ORM\Column(name="orden", type="integer", length=2, nullable=true)
*/
private $orden;
/**
* @var string $descripcion
*
* @ORM\Column(name="descripcion", type="string", length=15, nullable=true)
*/
private $descripcion;
/**
*
* @ORM\Column(type="date", nullable=true)
*/
private $fecha_creacion;
/**
*
* @ORM\Column(name="tiene_cooperadora", type="boolean", nullable=true)
*/
private $tiene_cooperadora;
/**
* @var string $url
*
* @ORM\Column(name="url", type="string", length=255, nullable=true)
*/
private $url;
/**
* @var string $url
*
* @ORM\Column(nullable=true)
* @Assert\Email()
*/
private $email;
/**
* @ORM\ManyToOne(targetEntity="Fd\TablaBundle\Entity\CargoAutoridad")
*/
private $cargo_autoridad;
/**
* @ORM\Column(nullable=true)
*/
private $nombre_autoridad;
/**
*
* @ORM\ManyToOne(targetEntity="Fd\TablaBundle\Entity\DistritoEscolar")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="distrito_escolar_id", referencedColumnName="id")
* })
*/
private $distrito_escolar;
/**
* @ORM\ManyToOne(targetEntity="Fd\TablaBundle\Entity\Sector")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="sector_id", referencedColumnName="id")
* })
*/
private $sector;
/**
* bidireccional lado inverso
* @ORM\OneToMany(targetEntity="Fd\EstablecimientoBundle\Entity\UnidadEducativa", mappedBy="establecimiento")
*/
private $unidades_educativas;
/**
* bidireccional lado inverso
* @ORM\OneToMany(targetEntity="Fd\EstablecimientoBundle\Entity\Autoridad", mappedBy="establecimiento")
*/
private $autoridades_rectorado;
<?php
namespace Fd\EdificioBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\Validator\Constraints\NotBlank;
use Fd\EdificioBundle\Entity\Domicilio;
/**
* @ORM\Table(name="edificio")
* @ORM\Entity(repositoryClass="Fd\EdificioBundle\Repository\EdificioRepository")
*/
class Edificio {
/**
* @var integer $id
*
* @ORM\Column(name="id", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var integer $cui
*
* @ORM\Column(name="cui", type="integer", nullable=true, unique=true)
*/
private $cui;
/**
* bidireccional lado inverso
* @ORM\OneToMany(targetEntity="Fd\EstablecimientoBundle\Entity\EstablecimientoEdificio", mappedBy="edificios")
*/
private $establecimiento;
/**
* @var integer $superficie
*
* @ORM\Column(name="superficie", type="integer", nullable=true)
*/
private $superficie;
/**
* @var Comuna
*
* @ORM\ManyToOne(targetEntity="Fd\TablaBundle\Entity\Comuna")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="comuna_id", referencedColumnName="id")
* })
*/
private $comuna;
/**
* @var Cgp
*
* @ORM\ManyToOne(targetEntity="Fd\TablaBundle\Entity\Cgp")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="cgp_id", referencedColumnName="id")
* })
*/
private $cgp;
/**
* @var Barrio
*
* @ORM\ManyToOne(targetEntity="Fd\TablaBundle\Entity\Barrio")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="barrio_id", referencedColumnName="id")
* })
*/
private $barrio;
/**
* @var DistritoEscolar
*
* @ORM\ManyToOne(targetEntity="Fd\TablaBundle\Entity\DistritoEscolar")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="distrito_escolar_id", referencedColumnName="id")
* })
*/
private $distritoEscolar;
/**
* bidireccional lado inverso
* @ORM\OneToMany(targetEntity="Fd\EdificioBundle\Entity\Domicilio", mappedBy="edificio")
*/
private $domicilios;
<?php
namespace Fd\EstablecimientoBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\Validator\Constraints\NotBlank;
/**
* Fd\EstablecimientoBundle\Entity\EstablecimientoEdificio
*
* @ORM\Table(name="establecimiento_edificio")
* @ORM\Entity
*/
class EstablecimientoEdificio
{
/**
* @var integer $id
*
* @ORM\Column(name="id", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* bidireccional lado propietario
* @ORM\ManyToOne(targetEntity="Fd\EstablecimientoBundle\Entity\Establecimiento", inversedBy="edificio")
* @Assert\NotBlank(message="El dato no puede quedar en blanco")
*/
private $establecimientos;
/**
* bidireccional lado propietario
* @ORM\ManyToOne(targetEntity="Fd\EdificioBundle\Entity\Edificio", inversedBy="establecimiento")
* @Assert\NotBlank(message="El dato no puede quedar en blanco")
*/
private $edificios;
/**
* @ORM\OneToMany(targetEntity="Fd\EstablecimientoBundle\Entity\Localizacion", mappedBy="establecimiento_edificio")
* bidireccional lado inverso
*/
private $localizacion;
/**
* @ORM\Column(name="cue_anexo", type="string", length=2, nullable=false)
*/
private $cue_anexo;
/**
* @var string $nombre
*
* @ORM\Column(name="nombre", type="string", length=50, nullable=true)
*/
private $nombre;
/**
*
* @ORM\Column(type="date", nullable=true)
*/
private $fecha_creacion;
/**
*
* @ORM\Column(type="date", nullable=true)
*/
private $fecha_baja;