1

任何人都可以帮助我了解以下查询的标准:

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

我正在尝试以下标准

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

上述标准检索表数据。

另外,如果我只需要 TableA 中的特定列,标准将如何变化?

谢谢你的时间。

编辑:TableA 与 TableB 具有一对多的关系。

4

2 回答 2

1

问题没有意义。在休眠状态下,这两个表实际上应该是实体,在这种情况下它们之间会有关系。您是否尝试随机加入 2 个表并返回结果?如果是这样,您必须使用 sql 并使用 aResultTransformer将结果转换为对象。

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 与表 B 一对多,那么我发现使用别名最容易

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

我希望这有帮助。问候,

于 2011-08-15T23:10:45.170 回答
0

With JOIN, you need to indicate to Hibernate that you only want the "root entity", whcih is tableA. Add the following to your code:

criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
于 2011-08-16T00:04:41.597 回答