Relacionamento OneToOne com chave composta

Ola a todos, estou com o seguinte problema, tenho que criar um controle de presença em um sistema de controle de treinamentos que tem um relacionamento OneToOne com a classe

que representa o controle de treinamento (eu acredito que seja OneToOne, visto que uma lista de presença pertence a um único treinamento a ser realizado e vice versa),

mas ao mesmo tempo tem um relacionamento de muitos para muitos com a tabela de pessoas que vão participar do treinamento, pensei em fazer assim, se a pessoa está ali na tabela

de presença significa que participou do treinamento, se não participou simplesmente não é inserido, mas minha duvida é como configurar isso com os annotations do hibernate, desde já

agradeço a ajuda, e se vocês acharem que tem uma forma melhor para fazer estou totalmente aberto, desculpa pelo texto XD.

Um treinamento possui uma lista de presença. Uma lista de presenças possui várias pessoas. Cada pessoa pode estar em uma ou mais listas de presença.
O que tem de errado nisso?
E onde está a necessidade da chave composta?

Errado acredito que não tenha nada nesse pensamento.

Quanto a chave composta vem do seguinte, o controle de treinamento tem uma chave composta, e faz parte da chave composta do controle de presença a data que está
sendo dado o treinamento e as pessoas que estão participando desse treinamento.

Pessoa(
id,
nome
);

Curso(
id,
nome,
descricao
);

Treinamento(
id,
idcurso
)

PessoaTreinamento(
id,
idPessoa,
idTreinamento,
)

Presenca(
idTreinamento,
idPessoa,
Data,
Falta -> sim ou não
);

veja se da uma clareada ai

@douglaskd agradeço mas o cenário não é bem esse, sei que não estou sendo claro, mas é muito para explicar e não posso dar tantos detalhes devido a estar desenvolvendo para um cliente em particular

tem como você colocar a modelagem ou é confidencial ?

tem como você colocar a modelagem ou é confidencial ?[/quote]

sim é confidencial

Você nunca precisa de uma chave composta, a não ser que ela seja realmente necessária e seja impossível garantir a unicidade dos dados sem ela.
Por exemplo, você pode ter dois treinamentos no mesmo dia e hora, a data seria a mesma e, o que garantiria isso seria um identificador único, uma chave sequencial.
Tudo bem que você pode estar apenas tentando adequar seu projeto ao banco, mas que uma chave composta é uma gambiarra, para mim, com certeza é. E, neste caso, não vejo como necessária.
De qualquer forma, se não está errado, tente pensar em como implementar.
ListaPresenca será um atributo de Treinamento.
E ListaPresenca possuirá uma collection de Pessoa.
Isso resolve o problema. Não?

@drsmachado concordo totalmente com a parte do collection quanto às pessoas, quanto a esse detalhe do atributo único a regra de negócio implica que isso

seja exatamente a chave composta do controle de treinamento mais a data para diferenciar, visto que a lista de presença não existe sem o agendamento

prévio do treinamento a ser realizado.

Quando a modelagem está errada, não há o que fazer.
Enfim, não há mistério.
Como vai usar PK composta, crie uma classe que simbolize esta PK, faça com que ela seja o @Id das classes em que ela será usada.
De resto, é isso:
Treinamento 1 : 1 ListaPresenca
ListaPresenca N : N Pessoas