[英]How to write join query in native SQL of Hibernate?
List<AddHotelBean> list=new ArrayList<AddHotelBean>();
List<HotelFacilities> list1=new ArrayList<HotelFacilities>();
public String execute(){
Configuration cfg=new Configuration();
cfg.configure();
SessionFactory sf=cfg.buildSessionFactory();
Session session= sf.openSession();
SQLQuery q=session.createSQLQuery("select d.name,d.country,f.monday,f.tuesday from hotel.hoteldetails1 d , hotel.hotelfacilities1 f where d.hotelid=f.hotelid;");
q.addScalar("name", StandardBasicTypes.STRING);
q.addScalar("country", StandardBasicTypes.STRING);
q.addScalar("monday", StandardBasicTypes.STRING);
q.addScalar("tuesday", StandardBasicTypes.STRING);
q.setResultTransformer(Transformers.aliasToBean(HotelFacilities.class));
List<HotelFacilities> l=q.list();
for(HotelFacilities a:l) {
a.getMonday();
a.getTuesday();
list1.add(a);
}
org.hibernate.QueryParameterException: could not locate named parameter [hotelid]
我收到此例外,請有人幫忙
其實我的疑問是我正在使用兩個pojo類,但是我的Transformers.aliasToBean只是一個類,實際上如何在輸出jsp頁面中打印兩個類的東西
提前致謝。
`
我認為您對參數感到困惑。 要在查詢中傳遞某些值時,可以調用setParameter()
。
SQLQuery q=session.createSQLQuery("select d.name from hotel.hoteldetails1 d where d.hotelid=:hotelidd");
q.setParameter("hotelid", 1);
您在查詢中不需要任何值,因此根本不需要調用setParamert。 嘗試這個
SQLQuery q=session.createSQLQuery("SELECT d.name, d.country, f.monday, f.tuesday FROM hoteldetails1 d JOIN hotelfacilities1 f ON d.hotelid=f.hotelid");
q.setResultTransformer(Transformers.aliasToBean(HotelFacilities.class));
List<HotelFacilities> l=q.list();
編輯
刪除;
從查詢中。
您正在使用setParameter
方法將值放入命名參數中,但沒有在查詢字符串中放入任何命名參數。 您可以使用“:”語法來實現。
我不知道您的查詢是什么,所以我不知道您是否真正想要命名參數。 從結果轉換器猜測,我認為您想要一個HotelFacilities
對象的列表。
另外,您使用的語法很尷尬,在本示例中將替換該語法。
from HotelFacilities f
join HotelDetails d
where d.name = :name
and d.country = :country
and f.monday = :monday
and f.tuesday = :tuesday
此查詢返回所有HotelFacilities,其中monday屬性和tuesday屬性與命名的參數匹配,並且匹配的HotelDetails與提供的名稱和國家/地區屬性匹配。 您不必加入HotelID,因為(我想)這已經在您的映射中處理過。
要在Java代碼中設置這些命名參數,請使用正確的類型化方法,在本例中為setString
。
q.setString("name", detailsName);
q.setString("country", detailsCountry);
q.setString("monday", facilitiesMonday);
q.setString("tuesday", facilitiesTuesday);
//我們在jdbc中編寫聯接查詢的方式與休眠方式相同
//local level
ArrayList<Object[]> data = new ArrayList<Object[]>();
Map request;
//method level
SQLQuery q=session.createSQLQuery("select h.roomid as roomid, h.phone1 as phone1,h.phone2 as phone2,r.type as type,r.nrooms as nrooms from hoteldetails1 h,roomdetails1 r where h.roomid=r.roomid ");
System.out.println("after query");
//q.setParameter(0,roomid);
q.addScalar("roomid",StandardBasicTypes.INTEGER);
q.addScalar("phone1",StandardBasicTypes.STRING);
q.addScalar("phone2",StandardBasicTypes.STRING);
q.addScalar("type",StandardBasicTypes.STRING);
q.addScalar("nrooms",StandardBasicTypes.STRING);
List<Object[]> l=q.list();
System.out.println("b4 for loop");
for(Object[] obj:l){
data.add(obj);
request.put("l",data);
}
return "success";
/*
in the jsp page how to retrive the output is given below
*/
//in jsp page code is like this
<%
List<Object[]> l =(List) request.getAttribute("l");
%>
<table border=1>
<tr>
<th>roomid</th>
<th>phone1</th>
<th>phone2</th>
<th>type</th>
<th>rooms</th>
</tr>
<%
for(Object[] obj:l){
int i=(Integer)obj[0];
String j=(String)obj[1];
String k=(String)obj[2];
String r=(String)obj[3];
String m=(String)obj[4];
out.println(obj[0] +" "+i);
out.println(obj[1] +" "+j);
out.println(obj[2] +" "+k);
out.println(obj[3] +" "+r);
out.println(obj[4] +" "+m);
%>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.