JPA - JOIN no List - [RESOLVIDO]

Bom Dia.

Digamos que eu tenho duas tabelas:

Fornecedor e Produto.

Onde eu tenho uma relação de 1 para N.

Portanto no ORM de Fornecedor terei um mapeamento do tipo OneToMany, e o atributo deste
relacionamento é um List.

No ORM Produto, tenho um mapeamento do tipo ManyToOne, e o atributo deste relacionamento
é um objeto do tipo Fornecedor.

E na consulta, quero retornar o Fornecedor do código 1 e seus produtos que tenham código
entre 10 e 15.

Fazendo a consulta de Produto para Fornecedor, ficaria assim:

String sql = "SELECT p FROM Produto p WHERE p.fornecedor.codigo = 1 AND p.codigo >= 10 AND p.codigo <= 15";

Como faço para fazer o inverso, ou seja de Fornecedor, onde tenho um List para
Produto.

Como especifico que neste List, só quero os produtos que tenham o id entre 10 e 15?

Muitos Simples:

Classe Fornecedor

@Entity(name="fornecedor")
public class Fornecedor implements Serializable {
	
	private static final long serialVersionUID = 1L;

	@Id
	@Column(nullable=false, name="codigo")
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	private Integer codigo;
	@Column(name="nome")
	private String nome;
	@OneToMany(mappedBy="fornecedor")
	private List<Produto> produtos;
	
	// Getters e Setttes abaixo ....

Classe Produto

@Entity(name="produto")
public class Produto implements Serializable {

	private static final long serialVersionUID = 1L;

	@Id
	@Column(nullable=false, name="codigo")
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	private Integer codigo;
	@Column(name="nome")
	private String nome;
	@ManyToOne
	@JoinColumn(name="codigo_fornecedor")
	private Fornecedor fornecedor;

JPQL

	StringBuilder sb = new StringBuilder();
	sb.append("SELECT f FROM ");
	sb.append(Fornecedor.class.getName()).append(" f ");
	sb.append("LEFT JOIN f.produtos p ");
	sb.append("WHERE f.codigo = 1 AND p.codigo >= 10 AND p.codigo <=15");

Ou seja, basta usar o IN, LEFT, ou RIGHT no List<> do Objeto.

Créditos César Oliveira

Abraço.