Olá Otávio..
Cara, então, no caso criei uma entidade chamada TabelaCliente, no qual é armazenado o cliente e data de início e término, bem como uma entidade chamada ClienteProduto, que possui a TabelaCliente, o Produto e o valor da tabela.
Nesse caso, como ficaria? 
Essas são as definições das minhas entidades:
@Entity
public class TabelaCliente implements Serializable {
    private static final long serialVersionUID = -7223499247611524735L;
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "tabela_cliente_sequence")
    @SequenceGenerator(name = "tabela_cliente_sequence", sequenceName = "tabela_cliente_sequence")
    private int codigo;
    private Calendar dataInicial;
    private Calendar dataFinal;
    @Null
    @ManyToOne
    private Cliente cliente;
    @OneToMany(mappedBy = "tabelaCliente")
    private List<ClienteProduto> produtos;
public class ClienteProduto implements Serializable {
    private static final long serialVersionUID = 916792558890873578L;
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "cliente_produto_sequence")
    @SequenceGenerator(name = "cliente_produto_sequence", sequenceName = "cliente_produto_sequence")
    private int codigo;
    @ManyToOne
    private Produto produto;
    private BigDecimal valor;
    private Calendar data;
    @ManyToOne
    TabelaCliente tabelaCliente;