1.返回的结果是Object数组,可以直接取,2.可以createQuery("select c as c, c.name as name from Customer c").setResultTransformer(Transformers.aliasToBean(YourClass.class)); 3.楼主可以创建相关的compositor类,比如CityItem,然后使用select new CityItem(city.id, city.name, city.electrityCompany.name) from City city
我理解你的意思,setResultTransformer可以的,不需要hbm,前提是你不需要从你获得的结果再次查询.不然要是使用view,hibernate也支持的我的第三点的意思是将查询的数据封装成自己的对象比如,User (id,name) Product(productId,productName,userId) 假设是many-to=oneselect new UserProduct(user.id,user.product.id) From User user,Product productpublic class UserProduct { private Integer id; private Product product;
//constructor //set get method }
UserProduct是自己创建的一个临时的对象,这个不需要hibernate配置文件的
错了,应该是 public class UserProduct { private Integer userId; private Integer productId; //constructor //set get method }
public class UserProduct { private Integer userId; private Integer productId; //constructor //set get method }
谢谢 tondayong1981 我不知道你用的Hibernate 是什么版本的,我的是 3.1的 用本地SQL 查询的话只能下面这样 SQLQuery query = session.createSQLQuery(sql) 但 SQLQuery 好像是没有 setResultTransformer 方法的 至于第 3 点可能和我的理解有的不一样,我试过了不行的,不过学习了。我的意思是有比如我有两个表分别为 tabA,tabB 我在PL-SQL 中的标准 Oracle sql 为, select tabA.aa,tabA.bb,tabB.xx,tabB.yy from tabA,tabB where tabA.id = tabB.id 现在为了把结果映射为一个对象,如我 create 了一个 class 为 ClsObj 的对象 ClsObj 具有属性 aa,bb,xx,yy 和他们的 get(),set()方法 然后把 sql 改为下面这样String sql = select tabA.aa as {c.aa},tabA.bb as {c.bb},tabB.xx as {c.xx},tabB.yy as {c.yy} from tabA,tabB where tabA.id = tabB.id 然后用Hibernate 的本地SQL 查询方式(没有任何的 ClsObj.hbm.xml配置文件) SQLQuery query = session.createSQLQuery(sql) query.addEntity("c",ClsObj.class); List list = query.list();
目的是把结果集直接映射为包含 ClsObj 对象的 List 集合,不过遗憾的是报错
上面应该是不行的,应该用上面我说的第三种方法
select new clsObj(tabA.aa ,tabA.bb,tabB.xx,tabB.yy )from tabA,tabB where tabA.id = tabB.id
我自己都晕了,上面的事hql.应该这样<sql-query name="PriceFilesByProduct"> <return alias="priceFile" class="com.risi.model.content.data.PriceFile"/> SELECT * FROM price_files f, price_files_products fp WHERE fp.product_id = :productId AND fp.price_file_id = f.id </sql-query>*你用相关的字段来代替并加上as 'name' 然后类中属性名称为name你往这个方向再试试,关键长时间不用都有点忘了
并且sql语句from cats其中cats必须是java POJO类名.(Cats)
大哥不用SQL 我怎么查啊,我的意思是查询结果是多个表的联合查询结果
这个结果是多个表里取的不同的字段,就是这个结果没有对应的表
from City city
谢谢你给的思路,不过好像没办法解决我的问题
第 3 点不太明白什么意思
我的意思是,我的 SQL 是本地SQL ,就是直接可以在PL-SQL里运行的,
现在就是想把这种面向关系数据库的查询结果转换为一个对象,
以前用 Ibatis 来做,感觉很爽,现在用 Hibernate ,不知到能不能直接把结果映射为一个普通的 JavaBean
(前提是不用去写什么 xx.hbm.xml)
因为我的结果是一个报表统计结果,要写 xx.hbm.xml 文件我也不怎么会
为了避免错误还是拿 Object 数组自己处理吧,本来还想偷懒的
不关怎么说谢谢各位了。
假设是many-to=oneselect new UserProduct(user.id,user.product.id) From User user,Product productpublic class UserProduct
{
private Integer id; private Product product;
//constructor
//set get method
}
public class UserProduct
{
private Integer userId; private Integer productId; //constructor
//set get method
}
{
private Integer userId; private Integer productId; //constructor
//set get method
}
我不知道你用的Hibernate 是什么版本的,我的是 3.1的
用本地SQL 查询的话只能下面这样
SQLQuery query = session.createSQLQuery(sql)
但 SQLQuery 好像是没有 setResultTransformer 方法的
至于第 3 点可能和我的理解有的不一样,我试过了不行的,不过学习了。我的意思是有比如我有两个表分别为 tabA,tabB
我在PL-SQL 中的标准 Oracle sql 为,
select tabA.aa,tabA.bb,tabB.xx,tabB.yy from tabA,tabB where tabA.id = tabB.id
现在为了把结果映射为一个对象,如我 create 了一个 class 为 ClsObj 的对象
ClsObj 具有属性 aa,bb,xx,yy 和他们的 get(),set()方法
然后把 sql 改为下面这样String sql = select tabA.aa as {c.aa},tabA.bb as {c.bb},tabB.xx as {c.xx},tabB.yy as {c.yy} from tabA,tabB where tabA.id = tabB.id
然后用Hibernate 的本地SQL 查询方式(没有任何的 ClsObj.hbm.xml配置文件)
SQLQuery query = session.createSQLQuery(sql)
query.addEntity("c",ClsObj.class);
List list = query.list();
目的是把结果集直接映射为包含 ClsObj 对象的 List 集合,不过遗憾的是报错
select new clsObj(tabA.aa ,tabA.bb,tabB.xx,tabB.yy )from tabA,tabB where tabA.id = tabB.id
<return alias="priceFile" class="com.risi.model.content.data.PriceFile"/>
SELECT * FROM price_files f,
price_files_products fp
WHERE fp.product_id = :productId
AND fp.price_file_id = f.id
</sql-query>*你用相关的字段来代替并加上as 'name' 然后类中属性名称为name你往这个方向再试试,关键长时间不用都有点忘了
谢谢你的热心解答,我再试试看
我不知道你这一段配置要写在什么地方,关键是我现在的SQL里涉及到的所有表都没有对应的
hbm.xml文件,总不能随便找个 *.hbm.xml 往里写吧
Hibernate 这个东西太慢了,以前公司也不赞成用的,现在有项目要用,自己也不怎么熟悉
所以只能来这里麻烦大家了,这位哥们太热心了,再次表示我的谢意。
不介意的话交个朋友吧,MSN:[email protected]
当数据量很大的时候,hibernate的效率不比jdbc慢的
// query.setLong(0, id);
// List result = query.list();
// Iterator it = result.iterator();
// while (it.hasNext()) {
// Object[] results = (Object[]) it.next();
// Bid bid = (Bid) results[0];
// tender = (Tender) results[1];
// }
各位帮忙看看,一对数组怎么在页面上接收呢