I oczywiście przez wiele godzin przepracowuję problem, opublikuję go tutaj, a minutę później...
W każdym razie odpowiedzią jest element mappedBy w adnotacji @OneToMany:
@OneToMany(cascade = CascadeType.ALL, fetch=FetchType.LAZY, mappedBy="member")
@MapKey(name = "name")
private Map<String, Preferences> preferences
= new HashMap<String, Preferences>();
Co ma pewien sens:które pole w encji Many wskazuje z powrotem na encję One? Nawet umożliwienie szukania pasującego pola @ManyToOne było zbyt podatne na błędy, myślę, że to, co zrobili (zakładając istnienie tabeli mapowania), jest jeszcze gorsze.