执行 SQL 的标准是什么?

发布于 2024-11-29 17:19:02 字数 379 浏览 1 评论 0原文

任何人都可以帮我解决以下查询的条件:

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 具有一对多关系。

Can any one help me out with Criteria for following query :

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

I am trying with the following Criteria

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

The above criteria retrives both the table data.

Also if I need only specific columns from TableA how will the criteria Change ?

Thanks for your time.

Edit: TableA has one-to-many relationship with TableB.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

那小子欠揍 2024-12-06 17:19:02

问题没有意义。在休眠中,这两个表实际上应该是实体,在这种情况下它们之间会有关系。您是否正在尝试随机连接 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 与表 B 具有一对多关系,那么我发现使用 Alias 最简单,

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

我希望这会有所帮助。问候,

Question doesn't make sense. In hibernate, the 2 Tables should actually be entities in which case they would have a relationship between them. Are you trying to randomly join 2 tables and get a result back? If so you have to use sql and use a ResultTransformer to convert the result into objects.

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;
}

Call this as follows:

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

UPDATE: If Table A has a 1-to-Many with Table B, then I find it easiest to use Alias

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

I hope this helps. Regards,

水水月牙 2024-12-06 17:19:02

使用JOIN,您需要向Hibernate 表明您只需要“根实体”,即tableA。将以下内容添加到您的代码中:

criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);

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);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文