1

我在 Hibernate 中的别名概念上有点挣扎。
我的情况如下:
订单

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

订单详情

    @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 个订单,我真的不知道我做错了什么。
谢谢!

4

3 回答 3

1

查询对我来说看起来没问题...尝试将“hibernate.show_sql”设置为“true”,这样您实际上可以在 System.out 中看到 SQL 或/并记录它 log4j.logger.org.hibernate.SQL=DEBUG, SQL_APPENDER

@lars 是的,你可以。Criteria API - 关联 别名只是全名/路径的简称 carCriteria.createAlias("car_parts.wheels", "wheels")

于 2010-03-30T08:12:57.037 回答
0

我不确定您是否可以将别名用于非列的内容,即没有@Column或-@JoinColumn注释。

于 2010-03-30T07:39:54.143 回答
0

这看起来是正确的。

在您的 DAO 部分中,您已经有一个名为“c”的变量 - 您可以发布初始化它的代码吗?这只是为了仔细检查您是否使用 Order.class 创建了原始标准。

然后接下来要检查您是否可以使用以下内容检索具有该 ID 的产品:

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

这样您就可以检查 id 是否正确,并且 Hibernate 可以找到该产品。

未能如其他评论者所建议的那样,我们必须开始查看生成的 SQL。

于 2010-03-30T09:36:11.803 回答