Критерии спячки - псевдоним
-
23-09-2019 - |
Вопрос
Я немного борюсь с концепцией псевдонима в 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, как предложили другие комментаторы.