La relación de uno a muchos de la doctrina no se salvará: violación de la restricción de integridad

Estoy tratando de usar Doctrine ORM Associations. He leído varios tutoriales y los documentos en línea, pero no funciona, y honestamente no estoy seguro de qué estoy haciendo mal aquí. Parece que mis experimentos con Doctrine son bastante impredecibles. Cualquier ayuda sería apreciada.

Me gustaría tener una entidad de usuario y una entidad de historial de usuario, que tiene varias filas para un solo usuario. Eso para mí suena como uno a muchos. No necesariamente necesito que sea bidireccional.

El problema que tengo es que agregar un elemento de historial a un usuario da como resultado un error cuando el usuario se guarda, porque la columna user_id no está establecida en la tabla user_history.

Entidades:

# Entity\User.php
<?php
namespace Application\Entity;

use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;

/**
 * @ORM\Entity
 */
class User
{
    /**
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     * @ORM\Column(type="integer")
     */
    protected $id;

    /**
     * @ORM\Column(type="string",length=255)
     */
    protected $username;

    /**
     * @ORM\OneToMany(targetEntity="UserHistory", mappedBy="user", cascade={"persist","remove"})
     * @ORM\JoinColumn(name="id", referencedColumnName="user_id")
     */
    protected $history;

    public function __construct()
    {
        $this->setHistory(new ArrayCollection());
    }

    public function getHistory()
    {
        return $this->history;
    }
}

# Entity\UserHistory.php
<?php
namespace Application\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity
 * @ORM\Table(name="user_history")
 */
class UserHistory
{
    /**
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     * @ORM\Column(type="integer")
     */
    protected $id;

    /**
     * @ORM\ManyToOne(targetEntity="User")
     * @ORM\JoinColumn(name="user_id", referencedColumnName="id", nullable=false)
     */
    protected $user;

    public function getUser()
    {
        return $this->user;
    }
}

En mi controlador, estoy intentando esto:

    $em = $this->getUserService()->getEntityManager();
    $user = $em->find('Picpara\Entity\User', 1);
    $history = new UserHistory();
    $user->getHistory()->add($history);
    $em->persist($user);
    $em->flush();

Todo lo cual resulta en una violación de la restricción de integridad.

Doctrine \ DBAL \ DBALException

Archivo: /myproject/vendor/doctrine/dbal/lib/Doctrine/DBAL/DBALException.php:91

Mensaje:

Se produjo una excepción al ejecutar 'INSERT INTO user_history (user_id) VALUES (?)' Con params [null]:

SQLSTATE [23000]: Infracción de restricción de integridad: 1048 La columna 'user_id' no puede ser nula

Como dije, he cavado por aquí en SO, busqué en Google, intenté mover las cosas en las anotaciones. Esto es lo más lejos que llego. No estoy seguro de lo que estoy haciendo mal. ¿Alguien puede ayudar?