Forse è necessario specificare un nome di schema nel nome della tabella di join:
@JoinTable(
name="persons_countries_residence", schema="persons",
joinColumns=@JoinColumn(name="person_id", referencedColumnName="id"),
inverseJoinColumns=@JoinColumn(name="country_id", referencedColumnName="id"))