I have a really simple setup to try out a bidirectional mapping with annotations:
@Entity
public class TypeA extends AbstractModel {
@Id
This is the way it's supposed to work: the owning side is the one which owns the relationship, and which is responsible of managing it in database. It's the responsibility of the developer (i.e. your responsibility) to make sure your object graph is always coherent : if one side of a relationship is modified, then the other side should be modified as well.
If you don't always do this, you must at least make sure to modify the owning side of the relationship, because Hibernate only cares about the owning side..