Какими будут критерии для следования SQL? - PullRequest
1 голос
/ 16 августа 2011

Может ли кто-нибудь помочь мне с критериями для следующего запроса:

SELECT * From TableA Inner Join TableB On TableA.ID=TableB.ID

Я пытаюсь использовать следующие критерии

Criteria criteria = session.createCriteria(TableA.class);
criteria.setFetchMode("TableB", FetchMode.JOIN);

Приведенные выше критерии извлекают обе данные таблицы.

Кроме того, если мне нужны только определенные столбцы из таблицы A, как изменятся критерии?

Спасибо за ваше время.

Редактировать: TableA имеет отношение один-ко-многим с TableB.

Ответы [ 2 ]

1 голос
/ 16 августа 2011

Вопрос не имеет смысла.В спящем режиме 2 таблицы должны быть сущностями, и в этом случае они будут иметь отношения между ними.Вы пытаетесь случайно объединить 2 таблицы и получить результат обратно?Если это так, вы должны использовать sql и использовать ResultTransformer для преобразования результата в объекты.

private ResultTransformer getResultsTransformer()
{
    ResultTransformer transformer = new AliasToBeanResultTransformer(
            MyResultBean.class) {
        @Override
        public Object transformTuple(Object[] values, String[] aliases)
        {
            MyResultBean row = new MyResultBean();
            for (int i = 0; i < aliases.length; i++)
            {
                row.set(aliases[i], values[i]);
            }
            return (row);
        }
    };
    return transformer;
}

Вызовите это следующим образом:

    Query q = session.createSQLQuery(sql);
    q.setResultTransformer(getResultsTransformer());
    List<MyResultBean> list = q.list();

ОБНОВЛЕНИЕ : Если в таблице A есть таблица «1 ко многим» с таблицей B, я считаю, что проще всего использовать псевдоним

Criteria criteria = getSession().createCriteria(TableA.class);
criteria.createAlias("tableB","b");
criteria.add(Restrictions.eqProperty("id", "b.id");
criteria.list();

. Надеюсь, это поможет.С уважением,

0 голосов
/ 16 августа 2011

С JOIN вам нужно указать Hibernate, что вы хотите только «корневую сущность», которая является таблицей A. Добавьте следующее в ваш код:

criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
...