有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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个订单,我真的看不出我做错了什么
谢谢


共 (3) 个答案

  1. # 1 楼答案

    这看起来是正确的

    在DAO部分中,您已经有了一个名为“c”的变量——您能将代码发布到初始化的地方吗?这只是为了再次检查您是否使用订单创建了原始标准。上课

    接下来要检查的是,您是否可以使用以下id检索该产品:

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

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

    如果做不到这一点,我们就必须按照其他评论者的建议,开始查看生成的SQL

  2. # 2 楼答案

    我觉得这个问题没问题。。。 尝试将“hibernate.show_sql”设置为“true”,这样您就可以在系统中看到sql了。出来 或/并将其记录为log4j。记录器。组织。冬眠SQL=DEBUG,SQL_APPENDER

    @lars是的,你可以Criteria API - Associations 别名只是全名/路径的简称 carCriteria。createAlias(“汽车零件、车轮”、“车轮”)

  3. # 3 楼答案

    我不确定你能不能把alias用于非列的内容,即没有@Column@JoinColumn-注释