【问题标题】:SQL Query to Hibernate CriteriaSQL 查询到休眠条件
【发布时间】:2013-09-24 11:55:54
【问题描述】:

我实际上是休眠的新手。在创建下面的 sql 查询的条件对象时遇到问题。请你带我走好吗?

SELECT P1.*,O1.PROJECT_OID FROM POINTALL P1
LEFT JOIN
OPERATION_PLAN O1
ON P1.OID = O1.GEOVISION_POINT_OID;

【问题讨论】:

    标签: sql hibernate criteria hibernate-criteria


    【解决方案1】:

    如果您的 POINTALLOPERATION_PLAN 表被映射,那么只有条件才能工作,否则使用 HQL 或 SQL。

    这是你需要创建的

    Criteria criteria = getSession().createCriteria(POINTALL.class,"P1");
    
    ProjectionList projections = Projections.projectionList(); 
    projections.add(Projections.property("P1.something"),"aliasName");
    projections.add(Projections.property("P1.something"),"aliasName");
    ..
    projections.add(Projections.property("O1.PROJECT_OID"),"PROJECT_OID");
    
    criteria.createAlias("P1.OPERATION_PLAN","O1", Criteria.LEFT_JOIN);
    
    criteria.setProjection(projections);
    

    【讨论】:

    • 然后我得到以下异常:org.hibernate.QueryException: could not resolve property: OPERATION_PLAN of: com.blabla.PointAll
    • 获取您在 PointAll bean 中为 OPERATION_PLAN 指定的确切名称
    • pointAll 是一个视图,而 operationPlan 是一个表。它们之间的唯一关系是pointOid。所以与 pointAll 中的 operationPlan 没有任何关系。
    • 不能用criteria api,试试原生sql或者hql
    【解决方案2】:

    您无需创建标准。您可以执行本机 SQL 查询,甚至可以在与 SQL 非常相似的 HQL 中编写相同的查询。

    【讨论】:

    • 我知道 HQL,但我需要动态添加限制。那是我的问题
    • 如果这两个实体是相关的(或映射的),那么你可以通过标准来做到这一点,否则 HQL 是方式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-24
    • 2011-06-08
    • 2015-01-25
    相关资源
    最近更新 更多