首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用hibernate使用内部连接返回多个对象类型

使用hibernate使用内部连接返回多个对象类型
EN

Stack Overflow用户
提问于 2011-09-22 05:13:47
回答 1查看 27.8K关注 0票数 19

我似乎在hibernate的查询中遇到了一些困难。我正在两个表上执行内连接。

代码语言:javascript
复制
SELECT * FROM product p INNER JOIN warehouse w ON p.wid = w.id

产品表:

代码语言:javascript
复制
id | name | wid | price | stock .....

仓库表:

代码语言:javascript
复制
id | name | city | lat | long .....

join结果:

代码语言:javascript
复制
id | name | wid | price | stock | id | name | city | lat | long .....

当我运行查询时..

代码语言:javascript
复制
Session.createSQLQuery(this.query)
        .addEntity("p", Product.class)
        .addEntity("w", Warehouse.class).list();

因此,对于每个结果,我都会得到一个包含Product objectWarehouse object的对象。

这是意料之中的。问题是hibernate将产品的id和名称分配给仓库对象的id和name属性。在创建Warehouse项目时,连接结果中的前两列似乎被覆盖了。Product对象始终包含正确的数据。

任何关于找到解决此问题的方法的建议,以便id和name列表示正确的Warehouse数据,我们将不胜感激。

提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2013-11-26 22:55:21

Reference

如果这两个实体不是来自同一个类,那么这里有一个示例:

代码语言:javascript
复制
public static void main(String[] args) {
        Session sess = NewHibernateUtil.getSessionFactory().openSession();
        SQLQuery q = null;
        String query = "select a.*, u.* from user u, account a where a.iduser=u.iduser";
        q = sess.createSQLQuery(query);
        q.addEntity(User.class);
        q.addEntity(Account.class);
        List lst = q.list();
        System.out.println("" + lst.size());

        for (int i = 0; i < lst.size(); i++) {
            System.out.println(((Object[]) lst.get(i))[0]);     //account bean, actually this is in reverse order - so this is user bean
            System.out.println(((Object[]) lst.get(i))[1]);     //user bean         & this account bean
        }
        sess.close();
    }
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7506732

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档