在hibernate状态下,查询似乎有些困难。我正在两个表上执行内部联接。
SELECT * FROM product p INNER JOIN warehouse w ON p.wid = w.id
产品表:
id | name | wid | price | stock .....
仓库表:
id | name | city | lat | long .....
联接结果:
id | name | wid | price | stock | id | name | city | lat | long .....
当我运行查询..
Session.createSQLQuery(this.query) .addEntity("p", Product.class) .addEntity("w", Warehouse.class).list();
因此,对于每个结果,我都会得到一个包含a Product object和a 的对象Warehouse object。
Product object
Warehouse object
这是预期的。问题是hibernate将产品的ID和名称分配给仓库对象的ID和名称属性。在创建Warehouse项目时,好像联接结果中的前两列已经结束了。产品对象始终包含正确的数据。
关于解决此问题的任何建议,以便表示正确仓库数据的id和name列将不胜感激。
提前致谢。
使用{}表格来避免列名重复的问题:
SELECT {p.*}, {w.*} FROM product p INNER JOIN warehouse w ON p.wid = w.id
摘自《 Hibernate参考文档》第18.1.4节。返回多个实体:
到目前为止,假定结果集的列名与映射文档中指定的列名相同。这对于连接多个表的SQL查询可能会造成问题,因为相同的列名可能出现在多个表中。 在以下查询中需要使用列别名注入(很可能会失败):
到目前为止,假定结果集的列名与映射文档中指定的列名相同。这对于连接多个表的SQL查询可能会造成问题,因为相同的列名可能出现在多个表中。
在以下查询中需要使用列别名注入(很可能会失败):
sess.createSQLQuery("SELECT c.*, m.* FROM CATS c, CATS m WHERE c.MOTHER_ID = c.ID") .addEntity("cat", Cat.class) .addEntity("mother", Cat.class)
该查询旨在每行返回两个Cat实例:一个cat及其它的母亲。但是,查询将失败,因为名称冲突。实例被映射到相同的列名。同样,在某些数据库上,返回的列别名很可能采用“ c.ID”,“ c.NAME”等形式,它们不等于映射中指定的列(“ ID”和“ NAME”) 。 以下形式不易受到列名重复的影响:
该查询旨在每行返回两个Cat实例:一个cat及其它的母亲。但是,查询将失败,因为名称冲突。实例被映射到相同的列名。同样,在某些数据库上,返回的列别名很可能采用“ c.ID”,“ c.NAME”等形式,它们不等于映射中指定的列(“ ID”和“ NAME”) 。
以下形式不易受到列名重复的影响:
sess.createSQLQuery("SELECT {cat.*}, {mother.*} FROM CATS c, CATS m WHERE c.MOTHER_ID = c.ID") .addEntity("cat", Cat.class) .addEntity("mother", Cat.class)
该查询指定: SQL查询字符串,带有用于Hibernate的占位符,以插入列别名作为查询返回的实体。上面使用的{cat.*}and {mother.*}表示法是“所有属性”的简写。
该查询指定:
SQL查询字符串,带有用于Hibernate的占位符,以插入列别名作为查询返回的实体。上面使用的{cat.*}and {mother.*}表示法是“所有属性”的简写。
{cat.*}
{mother.*}