Это необходимо сделать вручную для двунаправленных ссылок. Учебное пособие по гибернации дает хороший пример: http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html_single/#tutorial-associations-usingbidir
В вашем случае: на стороне OneToMany защитите метод setPersons (...) и определите открытый метод addPerson (Person p), например:
public void addPerson(Person p) {
this.getPersons().add(p);
p.setRole(this);
}
Кстати, если у человека может быть несколько ролей и роль может быть назначена нескольким людям, то, скорее всего, вам действительно нужны отношения ManyToMany. Итак, у вас будет:
public void addPerson(Person p) {
this.getPersons().add(p);
p.getRoles().add(this);
}
А в классе Персона:
public void addRole(Role r) {
this.getRoles().add(r);
r.getPersons().add(this);
}
Это необходимо, потому что, в отличие от EJB 2.x Контейнерно-управляемых отношений (CMR), это не обрабатывается автоматически. Hibernate использует подход POJO. Недостатком CMR является то, что для создания объектов требуется контейнер, тогда как вы можете создавать объекты POJO везде. И если вы их создадите, это просто Простые Старые Объекты Java, никаких хитростей.
Вот хорошая статья в блоге, которая обсуждает это далее: http://blog.xebia.com/2009/03/16/jpa-implementation-patterns-bidirectional-assocations/