Dúvida com @OneToOne e id com @GeneratedValue

Tenho as seguintes classes:

    @Entity
    @Table(name = "AGENDA")
    public class Agenda implements Serializable
    {  
       @Id
       @GeneratedValue
       @Column(name = "ID", nullable = false)  
       private Integer id;

       @OneToOne(cascade = CascadeType.ALL)
       @PrimaryKeyJoinColumn
       private AgendaConfirmada confirmacao;

    ...

    @Entity
    @Table(name = "AGENDA_CONFIRMADA")
    public class AgendaConfirmada implements Serializable 
    {
       @Id
       @Column(name = "ID", nullable = false)
       private Integer id;
    ...

Quando vou cadastrar um novo agendamento e ele já está confirmado tenho que fazer o seguinte:

    Agenda agendamento = new Agenda();
    // atribuição de valores...
    em.persist(agendamento);
    em.flush();
    em.refresh(agendamento); // flush() + refresh() para trazer o id
    Confirmacao = new AgendaConfirmada();
    // atribuição de valores...
    confirmacao.setId(agendamento.getId());
    agendamento.setConfirmacao(confirmacao);
    em.merge(agendamento)

Uso JTA com container managed transactions.

Sem querer pedir demais, mas não tem como o Hibernate automaticamente setar o id de AgendaConfirmada e gravar tudo com um persist() apenas?

Obrigado,
Felipe

Bom, para que o Hibernate faça isso vc tem que adicionar a seguinte anotação ao seu campo ID:

@GeneratedValue(strategy = GenerationType.AUTO)

Assim, ele vai incrementar automaticamente o ID do seu campo (igualzinho o auto-increment que os bancos de dados possuem)

Se eu colocar @GeneratedValue na tabela AgendaConfirmada o registro é inserido com um ID diferente da Agenda.