Hibernate查詢語句,請高手解釋一下【200分】
JPQL語句支持兩種方式的參數定義方式: 命名參數和位置參數。
。在同一個查詢語句中只允許使用一種參數定義方式。
命令參數的格式為:“: +參數名”例:Query query = *Query("select p from Person p where *id=:Id");*ameter("Id",new Integer(1));位置參數的格式為“?+位置編號”例:Query query = *Query("select p from Person p where *id=?1");*ameter(1,new Integer(1));。
sql、hql、jpql有啥不同
sql是關系數據庫查詢語言。
hql是hibernate造出來的對象sql語言,只有hibernate框架能夠解析,并將其通過一系列的映射轉換,拼湊成sql語言。jpql是EJB3.0中的JPA造出來的對象查詢語言。
這里要說一下,jpql其原型就是hibernate。sun看到hibernate做的orm技術做的非常好,成為行業內領導orm框架的主流產品,故sun將其吸收進EJB3中,制定了一套orm的java api標準(特別說明的是:hibernate框架制造者,也是ejb3 jpa規范的定制者)。
故jpql極其類似hql。
hibernate HQL添加語句
那么多人說了半天都沒有解決樓主所提問題,實際上這個問題我已經說個多次了,現在讓我再一次來回復樓主的問題吧:
使用HQL語句來完成插入操作是不能實現的,不管你使用insert into。.values。還是insert into。..select。..都不行
原因:因為Hibernate的HQL語言是用于面向對象實現查詢功能的,然而在插入操作中是不會牽涉任何查詢動作的,所以HQL不能用于insert語句的插入操作,而select、update、delete語句都可以有可能的查詢實現,比如:
select語句時標準的查詢,這個就不用再說了
update語句:update 對象名 set。..where。
delete語句:delete from 對象名 where 。..
看到了沒有,update與delete牽涉到where的查詢篩選過程,這個過程是需要采用HQL來實現的,然而insert永遠牽涉不到查詢篩選過程,所以Hibernate沒有對插入做insert實現
大家注意回答問題的時候要針鋒相對,不要大非所問,比如樓主問能否采用HQL實現插入動作,你們就不要再要求樓主直接調save方法,也不要再說用本地SQL實現之類的,很明顯這些樓主都是知道的,不用你來提醒別人應該怎么做,不應該怎么做。
搞不懂為什么有那么多人說HQL可以,說著這句話的人請你們動動腦子,如果不想動腦子自己動手試一下也可以看出問題嘛,不要張開嘴就亂說一通,誤人子弟。