¿Cuál es la diferencia entre inversedBy y mappedBy?

Estoy desarrollando mi aplicación usando Zend Framework 2 y Doctrine 2.

Mientras escribo anotaciones, no puedo entender la diferencia entremappedBy yinversedBy.

Cuando debo usarmappedBy?

Cuando debo usarinversedBy?

¿Cuándo no debo usar ninguno?

Aquí hay un ejemplo:

 /**
 *
 * @ORM\OneToOne(targetEntity="\custMod\Entity\Person", mappedBy="customer")
 * @ORM\JoinColumn(name="personID", referencedColumnName="id")
 */
protected $person;

/**
 *
 * @ORM\OneToOne(targetEntity="\Auth\Entity\User")
 * @ORM\JoinColumn(name="userID", referencedColumnName="id")
 */
protected $user;

/**
 *
 * @ORM\ManyToOne (targetEntity="\custMod\Entity\Company", inversedBy="customer")
 * @ORM\JoinColumn (name="companyID", referencedColumnName="id")
 */
protected $company;

Hice una búsqueda rápida y encontré lo siguiente, pero todavía estoy confundido:

Ejemplo 1ejemplo 2ejemplo 3

Respuestas a la pregunta(4)

Su respuesta a la pregunta