Implementando o padrão EAV com o Hibernate for User -> Configurações

Estou tentando configurar um padrão EAV simples no meu aplicativo da web usando Java / Spring MVC e Hibernate. Não consigo descobrir a mágica por trás da configuração de hibernação XML para este cenário.

Minha tabela de banco de dados "SETUP" possui três colunas:

user_id (FK)item de configuraçãosetup_value

A chave composta do banco de dados é composta deuser_id | item de configuração

Aqui está a classe Setup.java:

public class Setup implements CommonFormElements, Serializable {
  private Map data = new HashMap();
  private String saveAction;
  private Integer speciesNamingList;
  private User user;

  Logger log = LoggerFactory.getLogger(Setup.class);

  public String getSaveAction() {
    return saveAction;
  }

  public void setSaveAction(String action) {
    this.saveAction = action;
  }

  public User getUser() {
    return user;
  }

  public void setUser(User user) {
    this.user = user;
  }

  public Integer getSpeciesNamingList() {
    return speciesNamingList;
  }

  public void setSpeciesNamingList(Integer speciesNamingList) {
    this.speciesNamingList = speciesNamingList;
  }

  public Map getData() {
    return data;
  }

  public void setData(Map data) {
    this.data = data;
  }
}

Meu problema com a instalação do Hibernate é que não consigo descobrir como mapear o fato de que uma chave estrangeira e a chave de um mapa construirão a chave composta da tabela ... isso ocorre devido a uma falta experiência no uso do Hibernate. Aqui está minha tentativa inicial de fazer isso funcionar:

<composite-id>
  <key-many-to-one foreign-key="id" name="user" column="user_id" class="Business.User">
    <meta attribute="use-in-equals">true</meta>
  </key-many-to-one>
</composite-id>

<map lazy="false" name="data" table="setup">
  <key column="user_id" property-ref="user"/>
  <composite-map-key class="Command.Setup">
    <key-property name="data" column="setup_item" type="string"/>
  </composite-map-key>

  <element column="setup_value" not-null="true" type="string"/>
</map>

Qualquer insight sobre como mapear adequadamente esse cenário comum seria muito apreciado!

questionAnswers(1)

yourAnswerToTheQuestion