Я думаю, что это в значительной степени простейший случай отображения карты (то есть ассоциативного массива) объектов.
@Entity
@AccessType("field")
class Member {
@Id
protected long id;
@OneToMany(cascade = CascadeType.ALL, fetch=FetchType.LAZY)
@MapKey(name = "name")
private Map<String, Preferences> preferences
= new HashMap<String, Preferences>();
}
@Entity
@AccessType("field")
class Preferences {
@ManyToOne Member member;
@Column String name;
@Column String value;
}
Похоже, что это должно работать, и это работает в HSQL. В MySQL есть две проблемы:
Во-первых, он настаивает на том, чтобы существовала таблица с именем Members_Preferences, как если бы это было отношение многих ко многим.
Во-вторых, он просто не работает: так как он никогда не заполняет Members_Preferences, он никогда не получает настройки.
[Моя теория заключается в том, что, поскольку я использую только HSQL в режиме памяти, он автоматически создает Members_Preferences и никогда не должен получать карту настроек. В любом случае, либо Hibernate содержит огромную ошибку, либо я делаю что-то не так.]