Question de base: quel est l"équivalent en annotation hibernate/JPA de <map-key formula="..."/>? Je dois convertir le mapping suivant en annotations
1 2 3 4 5
| <map name="privateManagers" table="RH_EMP_FCT_GROUP_LINK" cascade="lock,merge">
<key column="EMP_ID"/>
<map-key formula="(select grp.FCT_GROUP_KEY from RH_EMP_FCT_GROUP grp where grp.FCT_GROUP_ID=FCT_GROUP_ID)" type="string"/>
<many-to-many column="FCT_ID" class="be.rmi.intranet.db.users.Function" />
</map> |
J'ai essayé ceci:
1 2 3 4
| @ManyToMany(fetch=FetchType.LAZY)
@Formula(value="(select grp.FCT_GROUP_KEY from RH_EMP_FCT_GROUP grp where grp.FCT_GROUP_ID=FCT_GROUP_ID)")
@JoinTable(name = "RH_EMP_FCT_GROUP_LINK", joinColumns = {@JoinColumn(name = "EMP_ID")}, inverseJoinColumns={@JoinColumn(name="FCT_ID") })
protected Map<String, Function> getPrivateManagers() { |
Ca fonctionne bien à l'exception de la clé. Le @Formula est ignoré et hibernate me crée la table suivante:
112 [main] DEBUG org.hibernate.tool.hbm2ddl.SchemaExport - create table RH_EMP_FCT_GROUP_LINK (LINK_ID bigint not null, emp_id bigint not null, fct_id bigint not null, fct_group_id bigint not null, mapkey varchar(255), primary key (EMP_ID, FCT_GROUP_ID))
On peut y constater la présence d'un "mapkey" qui correspond à la clé de ma map, ce qui n'est pas l'effet désiré.
J'ai aussi essayé ceci:
@MapKey(columns={@Formula(value="(select grp.FCT_GROUP_KEY from RH_EMP_FCT_GROUP grp where grp.FCT_GROUP_ID=FCT_GROUP_ID)")})
Mais d'après mon IDE, @Formula ne peux pas être considéré comme un @Column.
Donc si quelqu'un a une idée, il doit bien y avoir le moyen de faire ça avec des annotation.
Partager