Je pense que c'est à peu près le cas le plus simple pour mapper une carte (c'est-à-dire un tableau associatif) d'entités.Le plus simple des cas de mappage dans Hibernate ne fonctionne pas dans MySQL
@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;
}
Cela semble devoir fonctionner, et c'est le cas, dans HSQL. En MySQL, il y a deux problèmes: Tout d'abord, il insiste pour qu'il y ait une table appelée Members_Preferences, comme s'il s'agissait d'une relation many-to-many. Deuxièmement, cela ne fonctionne tout simplement pas: puisqu'il ne remplit jamais Members_Preferences, il ne récupère jamais les préférences.
[Ma théorie est, puisque je n'utilise HSQL en mode mémoire, il crée automatiquement Members_Preferences et n'a jamais vraiment besoin de récupérer la carte des préférences. Dans tous les cas, que ce soit Hibernate a énorme bug dans ou je fais quelque chose de mal.]