Mapeamento Hibernate

Tenho as seguintes classes:

    @Entity
public class Cliente implements Serializable, Criptografavel {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;
    private String nome;
    private String morada;
    private String nacionalidade;
    private String pais;
    private LocalDate dataNascimento;
    @OneToMany(mappedBy = "cliente", cascade = CascadeType.ALL)
    private List<Estadia> estadias;
    private String telemovel;
    private String tipoIdentificacao;
    private String numeroIdentificacao;
    //construtor, getters e setters omitidos
}


    @Entity
    public class Estadia {

        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private Integer id;
        private LocalDate entrada;
        private LocalDate saida;
        @Enumerated(EnumType.STRING)
        private Apartamento apartamento;
        @Transient
        private BigDecimal preco;
        private int adultosPax;
        private int criancasPax;
        private boolean garagem = false;
        private Cliente cliente;

    //construtor, getters e setters omitidos
}

@Entity
public class Reserva implements Criptografavel {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;
    private String nome;
    @OneToOne
    private Estadia estadia;
    @Enumerated(EnumType.STRING)
    private ReservaStatus status;
    @ManyToOne
    private Cliente cliente;
    private String contacto;
    private String recebidaPor;
    private String feitaPor;
    
    //construtor, getters e setters omitidos
}

Como posso fazer para ao setar o cliente na reserva, seja também setado o cliente na estadia, com hibernate?

Bom dia amigo

O framework não faz isso, setar valores dentro das variáveis é com você. Nessa estrutura que vc montou você vai ter que setar os valores da classe Reserva passando pela Estadia e Cliente:

  Cliente cliente = new Cliente();
  Estadia estadia = new Estadia();
  Reserva reserva = new Reserva();
  estadia.setCliente(cliente);
  reserva.setCliente(cliente);
  reserva.setEstadia(estadia);

O que o hibernate vai fazer é setar os ids das entidades ao chamar o valor do sequence e persistir no banco.