Hibernate标准 - 别名

时间:2010-03-30 06:54:43

标签: java hibernate orm hibernate-criteria

我在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 个答案:

答案 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。