[問題] Hibernate的getSession().createSQLQuery

看板java作者 (= =)時間3年前 (2021/01/16 17:47), 3年前編輯推噓1(100)
留言1則, 1人參與, 3年前最新討論串1/1
※狀況概述: 我嘗試用Hibernate做一些簡單的inner join查詢,不過下的SQL必須是符合某特定形式 才能正常運作。例如: public class TestDao extends HibernateDaoSupport { query = getSession().createSQLQuery("select c1.*,c2.* from Customer c1 inner join Country c2 on c1.country_id=c2.country_id where c1.name=:name"); query.setParameter("name", name); query.addEntity(Customer.class).addEntity(Country.class); list = query.list(); return list; 但如果把上面SQL的星號改成欄位名稱,就會跳錯,例如改成: select c1.name,c2.country_name from Customer c1 inner join Country c2 on c1.country_id=c2.country_id where c1.name=:name 執行到 list = query.list(); 就會跳以下的錯誤訊息: ※錯誤訊息: [org.hibernate.exception.GenericJDBCException: could not execute query] with root cause java.sql.SQLException: 資料欄名稱無效 這樣就變成每次查詢都要撈出全部資料才可以,顯得很多餘,但是又想不到如何修改 請問為何SQL打星號可以過,打欄位名稱就過不了呢? 那又要如何修改呢? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.167.40.4 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/java/M.1610790445.A.736.html 改寫成以下這樣即可: query = hibernateTemplate.getSessionFactory().openSession().createSQLQuery( "select name,(select country_name from Country c1 inner join Customer c2 on c1.country_id=c2.country_id where name=:name) country_name from Customer c3"); //將addEntity那行改成以下寫法: query.setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP); list = query.list(); return list; ※ 編輯: lueichun (1.167.40.18 臺灣), 01/17/2021 14:12:41

01/22 13:06, 3年前 , 1F
如果是寫column name的 是要用 native sql 和jpql不同
01/22 13:06, 1F
文章代碼(AID): #1W0hOjSs (java)
文章代碼(AID): #1W0hOjSs (java)