OneToMany com regras

Boa tarde galera!

Estou precisando de algumas dicas de como fazer o que estou precisando…

Resumindo: tenho no banco as tabelas: “produto”, “tabela”, “tabelaproduto”

Na entidade “produto” vou criar um OneToMany de List, certo?
Só que nessa List, vou carregar somente as tabelas do qual: tabela_produto.pro_cod = produto.pro_cod (isso a mapeação ja vai fazer sozinho), a regra que preciso implementar, é que na tabela “tabela” eu tenho um campo chamado “estado” e outro campo que é chamado “tabpro_id” que no caso é a chave extrangeira de TabelaProduto, e de alguma forma eu preciso passar (para a tabela “tabela”) os estados que é pra carregar (que não podem ser todos)

Ou seja, o código começa assim:

@Id
    @Column(name = "pro_cod")
    private long pro_cod;
    @OneToMany(mappedBy = "pro_cod", fetch= FetchType.LAZY)
    @Cascade(org.hibernate.annotations.CascadeType.SAVE_UPDATE)
    private List<TabelaProduto> tabelasProduto;

A duvida agora é, como vou colocar, para no atributo tabelasProduto, aparecer os resultados da TabelaProduto, sendo que eu só quero os estados SP e RJ que está na tabela “Tabela”…

Mais informações na pratica:

public class Produto implements Serializable { @Id @Column(name = "pro_cod") private long pro_cod; @Column(name = "pro_desc") private String pro_desc; @Column(name = "pro_vol") private int pro_vol; @Column(name = "pro_status") private boolean pro_status; @OneToMany(mappedBy = "pro_cod", fetch= FetchType.LAZY) @Cascade(org.hibernate.annotations.CascadeType.SAVE_UPDATE) private List<TabelaProduto> tabelasProduto;

public class TabelaProduto implements Serializable{ @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private long tabpro_id; @JoinColumn(name="tabpro_id", nullable = false) @OneToOne(cascade=CascadeType.PERSIST) private Tabela tab_id; @JoinColumn(name="pro_cod", nullable = false) @OneToOne(cascade=CascadeType.PERSIST) private Produto pro_cod;

public class Tabela implements Serializable{ @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private long tab_id; @JoinColumn(name="est_id", nullable = true) @OneToOne(cascade=CascadeType.PERSIST) private Estado est_id; @JoinColumn(name="cli_id", nullable = true) @OneToOne(cascade=CascadeType.PERSIST) private Cliente cli_id;

Cara, esse mapeamento está muito estranho.

Quando você faz o mapeamento, ele traz aonde os identificadores são iguais. Se você está precisando fazer esse tipo de filtro, algo está errado neste mapeamento.

Aliás, é muito estranho uma entidade Produto conter outra chamada TabelaProduto. Pode nos explicar melhor o que está tentando fazer? E Tabela também não diz muito.