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!

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top