java Hibernate标准别名
我对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;
DAO
c.createAlias("m_details", "detail").createCriteria("detail.m_product").add(Expression.idEq(productId));
所以我想搜索包含产品的每个订单
然而,通过这个查询,它一直返回0个订单,我真的看不出我做错了什么
谢谢
# 1 楼答案
这看起来是正确的
在DAO部分中,您已经有了一个名为“c”的变量——您能将代码发布到初始化的地方吗?这只是为了再次检查您是否使用订单创建了原始标准。上课
接下来要检查的是,您是否可以使用以下id检索该产品:
Product p = (Product)session.load(Product.class, productId)
这样,您就可以检查id是否正确,Hibernate就可以找到该产品
如果做不到这一点,我们就必须按照其他评论者的建议,开始查看生成的SQL
# 2 楼答案
我觉得这个问题没问题。。。 尝试将“hibernate.show_sql”设置为“true”,这样您就可以在系统中看到sql了。出来 或/并将其记录为log4j。记录器。组织。冬眠SQL=DEBUG,SQL_APPENDER
@lars是的,你可以Criteria API - Associations 别名只是全名/路径的简称 carCriteria。createAlias(“汽车零件、车轮”、“车轮”)
# 3 楼答案
我不确定你能不能把alias用于非列的内容,即没有
@Column
或@JoinColumn
-注释