我似乎在hibernate的查询中遇到了一些困难。我正在两个表上执行内连接。
SELECT * FROM product p INNER JOIN warehouse w ON p.wid = w.id
产品表:
id | name | wid | price | stock .....
仓库表:
id | name | city | lat | long .....
join结果:
id | name | wid | price | stock | id | name | city | lat | long .....
当我运行查询时..
Session.createSQLQuery(this.query)
.addEntity("p", Product.class)
.addEntity("w", Warehouse.class).list();
因此,对于每个结果,我都会得到一个包含Product object
和Warehouse object
的对象。
这是意料之中的。问题是hibernate将产品的id和名称分配给仓库对象的id和name属性。在创建Warehouse项目时,连接结果中的前两列似乎被覆盖了。Product对象始终包含正确的数据。
任何关于找到解决此问题的方法的建议,以便id和name列表示正确的Warehouse数据,我们将不胜感激。
提前谢谢。
发布于 2013-11-26 22:55:21
如果这两个实体不是来自同一个类,那么这里有一个示例:
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();
}
https://stackoverflow.com/questions/7506732
复制相似问题