『壹』 hibernate hql 語句去除重復數據
參考如下:
/**
* 功能:根據品牌查詢
*
* @param pageSize
* 每頁大小
* @param currentLPagem
* 當前第幾頁
* @param proctBlack
* 產品品牌
* @param proctBlackItem
* 產品分類
* @param proctSize
* 產品尺碼
* @param keyWord
* 搜索關鍵字
* @return
*/
public pageBean seachProctByBrank(int pageSize, int currentLPage,
String proct_Brank, String proct_itemName) {
// final String hql = "from " + OgrilProcts.class.getName()
// + " where proct_Brank='" + proct_Brank
// + "' and proct_itemName='" + proct_itemName
// + "' order by proct_registerDate desc";
final String hql = " from "
+ OgrilProcts.class.getName()
+ " as proct where proct.proctItemName='"
+ proct_itemName
+ "' and proctBrank='"
+ proct_Brank
+ "' and not exists( from "
+ OgrilProcts.class.getName()
+ " where proctItemName='"
+ proct_itemName
+ "' and proctBrank='"
+ proct_Brank
+ "' and proctItemNumber=proct.proctItemNumber and proctId<proct.proctId )";
int allRow = this.getAllRowCount(hql);// 總記錄數
int totalPage = pageBean.countTotalpage(pageSize, allRow);// 總頁數
final int offset = pageBean.countOffset(pageSize, currentLPage);// 當前頁開始記錄
final int length = pageSize;
final int currentPage = pageBean.countCurrentPage(currentLPage);
List list = this.queryForPage(hql, offset, length);// 記錄
// 把分頁信息保存到Bean中
pageBean pagebean = new pageBean();
pagebean.setPageSize(pageSize);
pagebean.setCurrentPage(currentPage);
pagebean.setAllRow(allRow);
pagebean.setTotalPage(totalPage);
pagebean.setList(list);
return pagebean;
}
『貳』 hql只顯示重復記錄的一條記錄
select distinct news from News news join fetch news.att order by news.newsno desc
『叄』 hql語句怎麼消除重復內容
1、hql語句和sql語句其實差不多的,只是把表名、欄位名用做相對應的類名、屬性內名等。
2、distinct 只能用於單容個欄位去除重復,對於多個欄位去除重復使用distinct很可能會得到你不想要的結果。
1、如果有多個欄位去除重復你可以是用group by語句。
2、這里不知道你根據哪幾個欄位排重,舉個例子,比如你的a表對應的有 b、c、d欄位,需要去除重復,
例如:對應的實體類為A,有屬性 b、c、d
HQL為:FROM A as a GROUP BY a.b,a.c,a.d;
『肆』 在hql中去重的問題,去除其中一個欄位有重復的
SELECT DISTINCT 列名稱 FROM 表名稱
『伍』 HQL查詢不重復數據
for(int i=0;i<LIST.size();i++)
Object[] obj=LIST.get(i);
『陸』 今天寫了一個hql作查詢,結果查詢出很多條重復的記錄,肯定做了笛卡爾積
from t1,t2,t3..tn這就是笛卡爾積
t1表總記錄乘以t2表總記錄乘以t3表總記
『柒』 hibernate hql 查詢指定欄位並獲取結果集 且出去這個欄位中的重復數據
hql="select s.id,s.name,t.id,t.name from User s,Useraddress t where t.id=s.id"
這條sql裡面的User和Useraddress是兩個實體類,現在組合查詢分別取出來兩個實體類裡面的兩個欄位,然後我想再建立一個實體類Result,裡面定義這四個結果集裡面的欄位,能不能執行完這條hql,正好把這個結果集對應到實體類Result裡面呢,Result這個實體類,沒寫映射文件Result.hbm.xml.
希望能幫下忙
2種做法
創建一個class temp
有屬性sid,name,tid,sname,tname
創建一個構造函數
public temp(sid,name,tid,sname,tname)
{
}
1.hql中
List<temp>
select new temp(s.id,s.name,t.id,t.name) from User s,Useraddress t where t.id=s.id
2.List
記錄的每一行是object[] 遍歷
object[0] ==s.id
object[1] ==s.name
object[2] ==t.id
object[3] ==t.name
感謝glamey兄弟的文章,正好解決了當前遇到的問題。原文鏈接如下:http://glamey.iteye.com/blog/721019
假設我們現在有一個DTO,其屬性包括兩張表的屬性,我們現在需要將sql語句查詢得到的內容轉為一個DTO對象,其解決方法如下:
String sql = "select u.userName as userName ,p.title as title ,p.addTime as addTime from user as u,post as p where u.id=p.userId"
Query q = factory.getCurrentSession().createSQLQuery(sql).setResultTransformer(Transformers.aliasToBean(PostVO.class));
上面select中as後面的內容必須和PostVO中屬性名一致,這樣就可以返回一個針對PostVO的一個集合。
其實大家可以看下hibernate這一部分的源碼就會發現,主要是使用了AliasToBeanResultTransformer這個類,通過sql的查詢,會返回數組,然後hibernate根據數據表的映射,自動幫我們來set對應的欄位屬性,所以標紅的部分務必要跟VO中的屬性值一直,要不然會報錯的。
如果需要的話,大家也可以重寫這個類。例如VOResultTransformer。然後在中更改成:
setResultTransformer(new VOResultTransformer(PostVO.class));
另外,除了以上glamey的方法外,還有一種方法:
Query q = session.createQuery("select new com.hibernate.MsgInfo(m.id, m.cont, m.topic.title, m.topic.category.name) from Msg m");
List<MsgInfo> list=q.list();
其中,MsgInfo是DTO。值得注意的是,第二種方法中DTO必須提供帶參數的構造方法,並且HQL語句中屬性的位置要與構造方法中的位置一一對應。
『捌』 用hql語句查出不重復信息
select distinct 欄位名 from 表名
欄位名就是你查出
小明
小明
小剛
這三條信息的語句,在前邊加上distinct去重函數就好
『玖』 hql 語句查詢oracle 數據數據重復顯示
其實可以用很簡單SQL語句抄將其查詢出來。如果想查詢數據表中某一個欄位重復(這里假設這個欄位名是ID1),可以使用以下SQL語句。
select Table1.* from Table1 right join (
select ID1 From Table1 Group by ID1 having Count(ID1) > 1 ) T on Table1.id1 = T.id1
如果想查詢數據表某兩個欄位重復,則可以使用如下語句查詢。
select Table1.*
from Table1 right join (
select ID1, ID2 From Table1 Group by ID1, ID2 having Count(ID1) > 1 and Count(ID2) > 1 ) T
註:上面代碼中出現的ID1和ID2欄位均不是數據表主鍵。