我在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个订单,我真的没看到我做错了什么 谢谢!
答案 0 :(得分:1)
查询对我来说没问题...... 尝试将“hibernate.show_sql”设置为“true”,这样您实际上可以在System.out中看到SQL 或者/并记录下来log4j.logger.org.hibernate.SQL = DEBUG,SQL_APPENDER
@lars是的,你可以。 Criteria API - Associations 别名只是全名/路径的简称 carCriteria.createAlias(“car_parts.wheels”,“wheel”)
答案 1 :(得分:0)
我不确定您是否可以为不是列的内容使用别名,即没有@Column
或@JoinColumn
- 注释。
答案 2 :(得分:0)
看起来很正确。
在您的DAO部分中,您已经有一个名为“c”的变量 - 您可以将代码发布到初始化的位置吗?这只是为了仔细检查您是否使用Order.class创建原始条件。
接下来要检查是否可以使用以下内容检索具有该ID的产品:
Product p = (Product)session.load(Product.class, productId)
这样你就可以检查id是否正确,Hibernate可以找到该产品。
如果不这样做,我们就必须像其他评论者所建议的那样开始查看生成的SQL。