Hibernate annotations - Chave estrangeira como composta

Galera,

Queria saber como mapear uma chave estrangeira composta no hibernate. Tenho o seguinte relacionamento no banco de dado:

O meu login é a chave primaria da tabela operador, e vai como chave estrangeira pra tabela permissão, sendo que ele vai também fazer parte da chave primária. Dentro do Java tenho um Enum de permissões, que irá preencher a coluna nome_permissao.

Classe Operador:

@Entity
@Table(name = "operador")
public class Operador implements Serializable, Cloneable {

    private static final long serialVersionUID = 1L;

    /**
     * Identificador para a classe. Login do operador.
     */
    @Id
    @Column(name = "login", length = 50, nullable = false)
    private String login;

    /**
     * Senha do operador.
     */
    @Column(name = "senha", length = 80, nullable = false)
    private String senha;

    /**
     * Email do operador.
     */
    @Column(name = "email", length = 50, nullable = false, unique = true)
    private String email;

    /**
     * Nome do operador.
     */
    @Column(name = "nome", length = 100, nullable = false)
    private String nome;

    /**
     * Permissão do operador.
     */
    @OneToMany(mappedBy = "operador")
    private List<Permissao> permissoes;

    /**
     * Status do operador: pode ser "ATIVO" ou "INATIVO".
     */
    @Enumerated(EnumType.STRING)
    @Column(name = "status", length = 20, nullable = false)
    private EnumStatusEquipamentoOperador status;

    /**
     * Funcionário do operador.
     */
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "funcionario_id", nullable = true)
    private Funcionario funcionario;

    /**
     * Data de cadastro do operador.
     */
    @Column(name = "dt_cadastro", nullable = true)
    @Temporal(TemporalType.TIMESTAMP)
    private Date dataCadastro = new Date();

    /**
     * Data da ultima modificação no operador.
     */
    @Column(name = "dt_modificacao", nullable = true)
    @Temporal(TemporalType.TIMESTAMP)
    private Date dataModificacao = new Date();

    /**
     * Operador que realizou a ultima modificação no operador.
     */
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "operador_login", nullable = true)
    private Operador operadorLogin;

Classe Permissao:

@Entity
@Table(name = "permissao", uniqueConstraints = { @UniqueConstraint(columnNames = { "login", "nome_permissao" }) })
public class Permissao implements Serializable, Cloneable {

    private static final long serialVersionUID = 1L;

    /**
     * Login do operador que tem uma permissão.
     */
    @Id
    @Column(name = "login", length = 50, nullable = false)
    private String login;

    /**
     * Nome da permissão.
     */
    @Enumerated(EnumType.STRING)
    @Column(name = "nome_permissao", length = 20, nullable = false)
    private EnumPermissao nomePermissao;

    /**
     * Referência do operador que tem uma permissão.
     */
    @OneToOne(optional = false, fetch = FetchType.LAZY)
    @JoinColumn(name = "login", referencedColumnName = "login", insertable = false, updatable = false)
    private Operador operador;

Alguem pode me ajudar como mapear as duas entidades para ficar de acordo com o modelo ER do banco de dados?