-
23-09-2019 - |
题
我在冬眠中的别名概念上有些挣扎。
我的情况如下:
命令
@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个订单,我真的看不到我在做什么错。
谢谢!
解决方案
查询对我来说看起来还不错...尝试将“ hibernate.show_sql”设置为“ true”,因此您实际上可以在System.Out或/和/and/and/and log4j.logger.org.org.hibernate.sql = debug = debug = debug,debug,debug,debug,debug,debug,debug, sql_appender
@lars是的。 标准API-协会别名只是全名/路径碳纤维的一个短名。CREATEALIAS(“ Car_parts.Wheels”,“ Wheels”)
其他提示
我不确定您是否可以将别名用于不是列的东西,即没有 @Column
或者 @JoinColumn
-注解。
看起来正确。
在您的DAO部分中,您已经有一个名为“ C”的变量 - 您可以发布初始化的代码吗?这只是为了仔细检查您是否正在使用order.class创建原始标准。
然后,下一步要检查是否可以使用该ID进行以下ID重新读取产品:
Product p = (Product)session.load(Product.class, productId)
这样,您正在检查ID是否正确,Hibernate可以找到该产品。
如果没有像其他评论者所建议的那样,我们不得不开始研究生成的SQL。
不隶属于 StackOverflow