Вопрос

Я немного борюсь с концепцией псевдонима в 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;

Дао

c.createAlias("m_details", "detail").createCriteria("detail.m_product").add(Expression.idEq(productId));

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

Это было полезно?

Решение

Запрос выглядит нормально для меня ... Попробуйте установить «hibernate.show_sql» на «true», чтобы вы на самом деле могли увидеть SQL в System.out или/и log It log4j.logger.org.hibernate.sql = отладка, SQL_Appender

@lars да, вы можете. Критерии API - ассоциациипсевдоним - это всего лишь короткое название полного имени/пути carcriteria.createalias ("car_parts.wheels", "Колеса")

Другие советы

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

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

В вашем разделе DAO у вас уже есть переменная с именем «C» - Можете ли вы опубликовать код, где он инициализируется? Это просто для того, чтобы дважды проверить, что вы создаете оригинальные критерии с Order.Class.

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top