A baixo a descrição em código de como Mapear um objeto do tipo Map tendo como chave um Enum e valor uma Entidade que poderia ser qualquer outro Objeto
@Data @AllArgsConstructor @NoArgsConstructor @Builder @Entity @Table(schema = "gdf",name = "tb_VeiculoPneus") public class VeiculoPneus implements Serializable{ @Id @ManyToOne(fetch = FetchType.EAGER) @JoinColumn(name = "CodVeiculo") private Veiculos codigoVeiculo; @OneToMany @JoinTable(name = "tb_VeiculoPosicaoPneu",schema = "gdf" ,uniqueConstraints = @UniqueConstraint(name="UK_PNEU_VEICULOPOSICAOPNEU" ,columnNames={"CodPneu"}) ,joinColumns= @JoinColumn(name="CodVeiculoPneus" ,foreignKey= @ForeignKey(name="FK_VEICULOPNEUS_VEICULOPOSICAOPNEU") ) ,inverseJoinColumns= @JoinColumn(name="CodPneu" ,foreignKey= @ForeignKey(name="FK_PNEU_VEICULOSPOSICAOPNEU") ) ) @MapKeyEnumerated(EnumType.STRING) @MapKeyClass(PosicaoPneu.class) @MapKeyColumn(name ="CodPosicao") private Map<PosicaoPneu,Pneu> pneus; }
Este mapeamento gera a seguinte saída SQL:
create table gdf.tb_VeiculoPosicaoPneu ( CodVeiculoPneus int not null , CodPneu bigint not null , CodPosicao varchar(255) not null , primary key (CodVeiculoPneus, CodPosicao) ) alter table gdf.tb_VeiculoPosicaoPneu add constraint UK_PNEU_VEICULOPOSICAOPNEU unique (CodPneu) alter table gdf.tb_VeiculoPosicaoPneu add constraint FK_PNEU_VEICULOSPOSICAOPNEU foreign key (CodPneu ) references gdf.tb_Pneu alter table gdf.tb_VeiculoPosicaoPneu add constraint FK_VEICULOPNEUS_VEICULOPOSICAOPNEU foreign key (CodVeiculoPneus) references gdf.tb_VeiculoPneus