Qual é a diferença entre inversedBy e mappedBy?

Estou desenvolvendo meu aplicativo usando o Zend Framework 2 e o Doctrine 2.

Enquanto escrevo anotações, não consigo entender a diferença entremappedBy einversedBy.

Quando devo usarmappedBy?

Quando devo usarinversedBy?

Quando devo usar nenhum?

Aqui está um exemplo:

 /**
 *
 * @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;

Fiz uma pesquisa rápida e encontrei o seguinte, mas ainda estou confuso:

Exemplo 1exemplo 2exemplo 3

questionAnswers(4)

yourAnswerToTheQuestion