當前位置:首頁 » 編程語言 » hibernate實體類sql多表查詢
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

hibernate實體類sql多表查詢

發布時間: 2022-09-09 01:42:23

⑴ java sql hql hibernate 多表聯合查詢

用SQLQuery query=session.CreateSQL();來操作就好了,多表聯合查詢因為沒有對應的POJO類,很麻煩。
用原生的SQL就可以直接用你上面的SQL語句了

⑵ hibernate sql查詢結果集怎麼轉換

在多表查詢的時候使用hibernate的sql查詢的時候,一般返回的是object[]數組,或者可以使用
session.createSQLQuery(sql).setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
來轉化為map來進行處理,可以通過以下方式將查詢結果轉化為實體類:

1,sql語句 String sql="select s.id as id,s.classname as classname from grade s,student st where s.id=st.classid"

利用以下語句
session.createSQLQuery(sql) .setResultTransformer(Transformers.aliasToBean(Grade.class))可以將sql中查詢出來的欄位轉化為班級這個實體類,但是必須為每個欄位指定別名,別名就是班級類裡面的對應的屬性,但必須注意,對每一個列都必須addScalar("列名"),如果不設置addScalar方法可能會報轉型錯誤的異常.如果查詢的結果裡麵包括多個表裡面的欄位,不能對應一個實體類去接受,就需要新建一個與查詢結果對應的實體類,或者直接使用map結果集

2,sql語句 String sql="select {s.*} from grade s,student st where s.id=st.classid"

針對這樣的全部欄位查詢的sql可以利用addEntity來轉化為實體類
SQLQuery query=session.createSQLQuery(sql) ;
query.addEntity("s", Grade.class);

SQL查詢語句,它帶一個佔位符,可以讓Hibernate使用欄位的別名.
查詢返回的實體,和它的SQL表的別名.
addEntity()方法將SQL表的別名和實體類聯系起來,並且確定查詢結果集的形態。
這樣就可以將班級這張表裡面的所有欄位的值賦值給班級這個實體類java培訓機構排名,而且必須是所有的屬性

3,sql語句 String sql="select {s.*},{st.*} from grade s,student st where s.id=st.classid"
SQLQuery query=session.createSQLQuery(sql) ;
query.addEntity("s", Grade.class);
query.addEntity("st", Student.class);
利用這樣的查詢得到的是一個object[]數組,object[0]就是班級實體類,object[1]就是學生實體類
可以用addScalar(String arg,Type type)方法定義要返回的欄位類型,如
s.createSQLQuery(shuiQingHQL).addScalar("STCD",Hibernate.STRING).addScalar("STNM")

⑶ hibernate進行多表查詢每個表中各取幾個欄位,也就是說查詢出來的結果集沒有一個實體類與之對應如何解決

你這個可以使用HQL語句,進行多表連接查詢,然後把查詢出來的結果,放到一個集合中
然後從前台直接去,如果在建實體類映射的話,顯得有些累贅。此是個人意見。

⑷ Hibernate中不用寫SQL和HQL的方式以及設置主外鍵的方式來實現多表查詢

Hibernate中的mapping,和資料庫中的主外鍵約束
沒有絕對的聯系。
即使資料庫中不設置外鍵關聯,同樣可以在hibernate中設置一對多,或者多對一,多對多的映射關系,只要你的表符合外鍵關聯的設計要求就可以。
查詢可以用HQL或者Native
SQL,這個看你自己選擇。如果用HQL就必須進行Mapping。如果用原生SQL就需要你自己寫sql語句,並將查詢結果自己解析成實體類。

⑸ hibernate如何實現多表查詢

理解你的意思,你是指取多個表的某些欄位,而這些欄位不是單獨的對象是吧?你直接用平時用的sql語句就行,然後用Object數組取數就可以了,比如:
Query query=session.createQuery("select name,age from tabName,tabAge");
List list=query.list();
for(int i=0;i<list.size();i++){
Object obj[] =(Object)list.get(i);
System.out.println("名字:"+obj[0]);//sql語句要查詢的第一個為obj[0]
System.out.println("年齡:"+obj[1]);//sql語句要查詢的第二個為obj[1]

}

⑹ hibernate 用sql完成多表查詢的結果集如何封裝

將student,class關聯創建一個視圖,然後createSQLQuery("查詢視圖")
.setResultTransformer(Transformers.aliasToBean(視圖VO.class))
.list();
這樣就萬事大吉了

⑺ hibernate使用原生sql多表查詢報錯。

第一:直接使用HibernateTemplate 你的sql中from+對象名稱(不是表名)。
第二:在hibernate中使用原生sql需要繼承hibernate原來的類,public Object doInHibernate(final Session session) throws HibernateException, SQLException

⑻ hibernate 多表查詢結果作為一個表,然後在關聯此表在次查詢

一、 Hibernate簡介Hibernate是一個JDO工具。它的工作原理是通過文件(一般有兩種:xml文件和properties文件)把值對象和資料庫表之間建立起一個映射關系。這樣,我們只需要通過操作這些值對象和Hibernate提供的一些基本類,就可以達到使用資料庫的目的。例如,使用Hibernate的查詢,可以直接返回包含某個值對象的列表(List),而不必向傳統的JDBC訪問方式一樣把結果集的數據逐個裝載到一個值對象中,為編碼工作節約了大量的時間。Hibernate提供的HQL是一種類SQL語言,它和EJBQL一樣都是提供對象化的資料庫查詢方式,但HQL在功能和使用方式上都非常接近於標準的SQL. 二、 Hibernate與JDBC的區別Hibernate與JDBC的主要區別如下:

1、 Hibernate是JDBC的輕量級的對象封裝,它是一個獨立的對象持久層框架,和App Server,和EJB沒有什麼必然的聯系。Hibernate可以用在任何JDBC可以使用的場合,從某種意義上來說,Hibernate在任何場合下取代JDBC.

⑼ 多表間復雜的SQL查詢是否能用Hibernate

復雜的表之間關系,如果使用hibernate的話,一般這樣處理
先建立好表,但不要建立外鍵關系,然後寫實體類的時候建立關系
------------------------
復雜的SQH語句就不寫hql語句了,還是寫plsql語句,如下例:
String sql=select o1.* from org_adapter_status o1 join (select max(checkedtime) maxc,adapter,`SERVER` from org_adapter_status group by adapter,`SERVER`) o2 on (o1.`SERVER`=o2.`SERVER` and o1.adapter=o2.adapter and o1.checkedtime=o2.maxc;

---------------------------------
this.getHibernateTemplate().getSessionFactory().getCurrentSession().createSQLQuery(sql).addEntity(Adapter.class).list();

但是復雜的sql語句推薦使用mybatis、ibatis這類的持久層框架,完全由自己定義sql語句!
如果你的項目中已經使用了hibernate,那就不要換了,反正也能做的!