Связать сущности между собой возможно тольки при участии хотя бы одного первичного ключа этих сущностей, т.к. Doctrine различает сущности, благодаря первичному ключу, как и в теории базы данных в принципе. Таким образом в данном случае поле system_key не характеризует сущность А в целом, а просто является одним из его аспектов наряду с другими полями. То есть нужен критерий по которому можно однозначо различить сущность класса А от другой сущности того же класса. Таким критерием, как уже поняли, и выступает поле id, т.е. первичный ключ по которому различают одну запись от другой
Свойства mappedBy, inversedBy в аннотациях ManyToOne, OneToMany следует указывать только если нужна именно двунаправленная связь между сущностями, т.е. когда В доступен из А и наоборот. Если требуется однонаправленная связь, т.е. достаточно из В получить А, то Doctrine-е надо явно указать связываемые поля через JoinColumn. В данном случае достаточно манипуляции с классом B, например:
class B
{
/**
* @ORM\ManyToOne(targetEntity="A")
* @ORM\JoinColumn(name="a_id", referencedColumnName="id")
*/
private $address;
}
class A
{
// ...
}
где, name="a_id" - поле таблицы B, referencedColumnName="id" - первичный ключ таблицы A