Hibernate 4: ¿Qué debería reemplazar a @MapKey en desuso para asignar una colección de mapas mientras Key es un tipo de usuario de Hibernate personalizado?

Considerando las siguientes dos tablas:

| User      | UserAttribute     |
|---------- |-------------------|
| userId(PK)| attributeId(PK)   |
| firstName | userId            |
| lastName  | name              |
| other     | locale            |
| active    | value             |

En originalhibernate-3.2.2, elbidireccional uno a muchos la relación funciona bien:

@Entity
@Table(name = "User")
public class UserHbm {

    @Id
    @GeneratedValue(generator = "id-generator")
    @Column(name = "userId")
    private long id;

    @Column
    private String firstName;

    @Column
    private String lastName;

    @Column
    private String other;

    @Column
    private boolean active = true;

    @OneToMany (mappedBy = "user", cascade = CascadeType.ALL, fetch=FetchType.LAZY)
    @MapKey(columns = { @Column(name = "name"), @Column(name = "locale") })
    @Cascade(org.hibernate.annotations.CascadeType.DELETE_ORPHAN)
    private Map<AttributeKeyHbm, UserAttributeHbm> attributes = null;

    //other methods, getter & setting, etc...
}
@Entity
@Table(name = "UserAttribute")
public class UserAttributeHbm {

    @Id
    @GeneratedValue(generator = "id-generator")
    @Column(name="attributeId")
    private long id;

    @ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE} )
    @JoinColumn(name="userId")
    private UserHbm user;

    @Column
    private String name;

    @Column
    private Locale locale = Locale.ENGLISH;

    @Column
    private String value;

    // other methods...
}
public class AttributeKeyHbm implements UserType {

    protected static int[] SQL_TYPES = { Types.VARCHAR, Types.VARCHAR };

    private String name;

    private Locale locale;

    public AttributeKeyHbm(String name, Locale locale) {
        this.name = name;
        this.locale = locale;
    }

    //other override methods, assemble, deepCopy & nullSafeGet, etc...
}

Lo que hacehibernate&nbsp;La migración de 3.2.2 a 4.3.11 difícil es el tipo de usuario disfrazadoAttributeKeyHbm&nbsp;como una clave deattributes&nbsp;enUserHbm

AttributeKeyHbm&nbsp;es un UserType disfrazado de Hibernate, que contiene dos columnas deUserAttributeHbm, name&nbsp;ylocal&nbsp;respectivamente.

Desde la anotación de hibernación@MapKey&nbsp;esobsoleto, He intentado usar las siguientes anotaciones una por una, para reemplazar el original@MapKey:

@MapKeyType(value=@Type(type="com.xxx.xxx.AttributeKeyHbm"))
@MapKeyJoinColumns(value={ @MapKeyJoinColumn(name = "name"),  @MapKeyJoinColumn(name = "locale")})
@MapKeyJoinColumn(name = "AttributeKeyHbm")

Pero todo termina con estas excepciones:

org.hibernate.MappingException: collection index mapping has wrong number of columns: com.xxx.xxx.UserHbm.attributes type: com.xxx.xxx.AttributeKeyHbm

Entonces mis preguntas son:

Cómo implementar la misma función enUserHbm&nbsp;conhibernate-4.3.11, Dado queAttributeKeyHbm&nbsp;no se pudo abandonar porque ya está siendo utilizado por otra API en gran medida.ComoAttributeKeyHbm&nbsp;tiene dos columnas, ¿es correcto o suficiente para implementar la interfaz?UserType&nbsp;en lugar deCompositeUserType