日期:2014-05-17  浏览次数:20733 次

HQL的一个基本问题
我有1个Person对象,里面就3个属性 id、name、photos
现在问题是这个photos的对象是 List<String> ,现在我就想单单取出这个photos中的值,怎么取啊?
(这个photos在映射的时候被映射成了另外一张表)

String strSql = "select p.name from Person p where p.id=1";
List<String> photos = (List<String>)(session.createQuery(hql).list());
for(int i =0; i<photos.size(); i++){
  System.out.println(photos.get(i));
}

上面是用来获取name值的没有问题,但是当写成

String strSql = "select p.photos from Person p where p.id=1" ;
Query q = session.createQuery(hql);

这里就出错了,说not an entity


------解决方案--------------------
得用连接查询。join试试
------解决方案--------------------
String strSql = "select p.photos from Person p where p.id=1" ;
Query q = session.createQuery(hql);
看出是什么问题了吧


------解决方案--------------------
筒靴 你把 下面的查询 改一下试试
把3个字段都加上.

我猜测的哈,嘿嘿.
------解决方案--------------------
你只有一个字段 ,用list<Object> 接收
------解决方案--------------------
先说你就建立了一个类Person类,有三个属性 id,name,List<String> 
所以你没用到类与类之间的那些一对一、多对一等关联。

String hqlSql="from Person as p where p.id=1";
//这里是获取的所有的Person,而不是所有的photos
Person p1=session.createQuery(hqlSql).list();
//获取List列表photos
List<String> photos=p1.getPhotos();
------解决方案--------------------
我写错了。。楼主见谅。
重新整理一下。
既然知道person的id值就可以直接使用session的get(Class classname,id);方法根据id 获得查询实体。

这样的话代码应该这样:
//得到id是1的person对象
Person p1=session.get(Person.class,1);
//获取List列表photos
List<String> photos=p1.getPhotos();


如果非使用hql语句的话应该这样写:
String hqlSql="from Person as p where p.id=1";
//这里是获取的所有id=1的Person,而不是所有的photos
List<Person> p1s=session.createQuery(hqlSql).list();
//由于id为主键,p1s.size()==1也就是说id=1的person就有一个
//获取p1所有的photos
List<String> photos=p1s.get(0).getPhotos();
其实这种方法已经很绕远了。不如采用第一个。