Critérios de hibernação — alias
-
23-09-2019 - |
Pergunta
Estou lutando um pouco com o conceito de alias no Hibernate.
Minha situação é a seguinte:
Ordem
@OneToMany(cascade=CascadeType.ALL,mappedBy="m_order")
private Set<OrderDetail> m_details;
Detalhes do pedido
@ManyToOne(cascade=CascadeType.ALL)
@JoinColumn(name="product_id")
private Product m_product;
@ManyToOne(cascade=CascadeType.ALL)
@JoinColumn(name="order_id")
private Order m_order;
DAO
c.createAlias("m_details", "detail").createCriteria("detail.m_product").add(Expression.idEq(productId));
Então, quero pesquisar todos os pedidos que contenham um produto.
No entanto, com esta consulta ela continua retornando 0 pedidos e realmente não vejo o que estou fazendo de errado.
Obrigado!
Solução
a consulta parece boa para mim ...Tente definir "hibernate.show_sql" como "true" para que você possa ver o SQL no sistema.out ou/e log4 log4j.logger.org.hibernate.sql = Debug, sql_appender
@lars sim, você pode. API de critérios - AssociaçõesAlias é apenas um nome curto de um nome completo/caminho carcriteria.createalias ("car_parts.wheels", "rodas")
Outras dicas
Não tenho certeza se você pode usar alias para coisas que não são uma coluna, ou seja, não tem o @Column
ou @JoinColumn
-anotação.
Isso parece correto.
Na sua seção DAO, você já tem uma variável chamada 'C' - você pode postar o código onde isso é inicializado? Isso é apenas para verificar se você está criando os critérios originais com o pedido.class.
Então, a próxima coisa a verificar se você pode retiver o produto com esse ID com o seguinte:
Product p = (Product)session.load(Product.class, productId)
Dessa forma, você está verificando se o ID está correto e o Hibernate pode encontrar esse produto.
Não teremos que começar a olhar para o SQL gerado como os outros comentaristas sugeriram.