Критерии гибернации - псевдоним - PullRequest
1 голос
/ 30 марта 2010

Я немного борюсь с концепцией псевдонима в Hibernate.
Моя ситуация следующая:
Заказать

@OneToMany(cascade=CascadeType.ALL,mappedBy="m_order")
private Set<OrderDetail> m_details; 

OrderDetail

    @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));

Так что я хочу искать каждый заказ, который содержит продукт.
Однако с этим запросом он возвращает 0 заказов, и я не вижу, что я делаю неправильно.
Спасибо!

Ответы [ 3 ]

1 голос
/ 30 марта 2010

запрос выглядит нормально для меня ... попытайтесь установить для «hibernate.show_sql» значение «true», чтобы вы могли видеть SQL в System.out или / и зарегистрируйте его log4j.logger.org.hibernate.SQL = DEBUG, SQL_APPENDER

@ Ларс, да, ты можешь. Критерии API - Ассоциации псевдоним - это просто краткое имя полного имени / пути carCriteria.createAlias ​​("car_parts.wheels", "колеса")

0 голосов
/ 30 марта 2010

Это выглядит правильно.

В вашем разделе DAO у вас уже есть переменная с именем 'c' - вы можете опубликовать код, где она инициализируется? Это просто для того, чтобы проверить, что вы создаете исходные критерии с помощью Order.class.

Затем следует проверить, можете ли вы получить продукт с этим идентификатором:

Product p = (Product)session.load(Product.class, productId)

Таким образом, вы проверяете правильность идентификатора, и Hibernate может найти этот продукт.

В противном случае нам придется начать смотреть на сгенерированный SQL, как предлагали другие комментаторы.

0 голосов
/ 30 марта 2010

Я не уверен, что вы можете использовать псевдоним для материала, который не является столбцом, т.е. не имеет аннотации @Column или @JoinColumn.

...