繁体   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