Representar em Hibernate

11 respostas
Daniel_Reis

Pessoal, já tentei a morrer e não consegui…

como represento essa query no hibernate?

select distinct cat.* from categoria cat where cat.pk_categoria not in (select fk_categoria from produtocat where fk_produto = 33)

Obrigado a todos…

11 Respostas

rodrigo_gomes

Ola,

Você poderia descrever resumidamente os objetos que estão envolvidos na query que você quer fazer, e que tipo de resultado você quer?
Vamos pensar em objetos a principio. Esqueça sql.

L

Uma coisa a ser observada é que o comando in no Sql pode ser substituído por um inner join, coisa que eu acredito que seja mais fácil de fazer no HSLQ.

Daniel_Reis
Você poderia descrever resumidamente os objetos que estão envolvidos na query que você quer fazer, e que tipo de resultado você quer?

Então, eu quero buscar as categorias que não estão na tabela produtocat para um determinado id de produto.

meu model de categoria:

@Entity
@Table(name = "categoria")
public class Categoria {
	@Id
	@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "CAT_SEQ")
	@SequenceGenerator(name = "CAT_SEQ", sequenceName = "categoria_pk_categoria_seq", allocationSize = 1)
	@Column(name = "pk_categoria")
	private Integer categoriaId;

	private String catDescricao;

meu model de produtocat

@Entity
@Table(name = "produtocat")
public class ProdutoCat {
	@Id
	@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "PRODUTOCAT_SEQ")
	@SequenceGenerator(name = "PRODUTOCAT_SEQ", sequenceName = "produtocat_pk_produtocategoria_seq", allocationSize = 1)
	@Column(name = "pk_produtocategoria")
	private Integer produtoCatId;

	@ManyToOne(cascade = { CascadeType.PERSIST, CascadeType.MERGE })
	@JoinColumn(name = "fk_categoria")
	private Categoria categoria;

obrigado...

Daniel_Reis

leonardocregis:
Uma coisa a ser observada é que o comando in no Sql pode ser substituído por um inner join, coisa que eu acredito que seja mais fácil de fazer no HSLQ.

Isso é uma verdade, tentei fazer com INNER JOIN e não consegui…

Obrigado…

rodrigo_gomes

Ola,

Se vc puder usar criteria, tente começar por aqui:
http://www.javafree.org/javabb/viewtopic.jbb?t=856842

Daniel_Reis

Olá Rodrigo,

tinha visto esse tópico, dei uma pesquisada, mas não consegui aplicar dessa forma…

Obrigado.

Daniel_Reis

Depois de alguns testes cheguei aqui:

public static List<Categoria> listarItemsRelacionados() {
		session = HibernateUtil.getSession();
		try {
			session.beginTransaction();
			List<Categoria> result = session
					.createQuery(
							"from Categoria where categoriaId not in (select produtoCatId from ProdutoCat where produto = 9)")
					.list();
			

			session.getTransaction().commit();
			session.close();

			return result;
		} catch (HibernateException ex) {
			ex.printStackTrace();
			session.close();
			return null;
		}
	}

funcionou parcialmente, ele está me trazendo um item a mais... alguém sabe porque?

Obrigado...

Daniel_Reis

resolvido, tinha errado o nome do campo…

:twisted:

L

List result = session
.createQuery(
“Select categoria
from Categoria categoria
inner join categoria.produtos produto
where produto.produtoCatId = 9)”
).list();

Você pode ter o mesmo resultado com o query acima.
Claro que provavelmente eu não botei o nome certo na parte que diz categoria.produtos,mas em essencia é o nome que você mapeou para o item.

Daniel_Reis

Tentei vários INNER JOIN inclusive acho que esse que vc fez tbm, e não deram certo, à noite vou testar e posto aqui.

Obrigado… :slight_smile:

L

O grande probelma desse query é que se você não colocar o Select na frente ele retorna um
object[] e fica bem confuso mesmo…

Não sei se foi isso que você teve problema.

Criado 3 de maio de 2008
Ultima resposta 5 de mai. de 2008
Respostas 11
Participantes 3