簡體   English   中英

是否可以通過使用Hibernate條件獲取Order的聯接表的SQL別名?

[英]Is it possible to get the SQL alias of a join table for a Order by using Hibernate criteria?

我有這種查詢

Critetria criteria = session.createCriteria(Perosn.class,"person");
criteria.createAlias("person.cityInformation","city",JoinType.LEFT_OUTER_JOIN);
criteria.createAlias("city.streetInformation","street",JoinType.LEFT_OUTER_JOIN);
criteria.add(new NativeSQLOrder("field({alias}.id,3,2,1)",true)));

NativeSQLOrder.java

import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.annotations.common.util.StringHelper;
import org.hibernate.criterion.CriteriaQuery;
import org.hibernate.criterion.Order;

public class NativeSQLOrder extends Order
{
    private static final long   serialVersionUID    = 1L;
    private final static String PROPERTY_NAME       = "uselessAnyways";
    private boolean             ascending;
    private String              sql;

    protected NativeSQLOrder(String sql, boolean ascending)
    {
        super(PROPERTY_NAME, ascending);
        this.sql = sql;
        this.ascending = ascending;
    }

    @Override
    public String toSqlString(Criteria criteria, CriteriaQuery criteriaQuery) throws HibernateException
    {
        StringBuilder fragment = new StringBuilder();
        fragment.append("(");
        fragment.append(sql);
        fragment.append(")");
        fragment.append(ascending ? " asc" : " desc");
        return StringHelper.replace(sql, "{alias}", criteriaQuery.getSQLAlias(criteria));
    }
}

我想按街道字段的ID排序,但使用此方法我得到第一個表Person的別名。有什么辦法可以獲取Street表的別名呢

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM