第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用列表參數(shù)將 HQL 查詢轉(zhuǎn)換為可執(zhí)行的 SQL 查詢

使用列表參數(shù)將 HQL 查詢轉(zhuǎn)換為可執(zhí)行的 SQL 查詢

猛跑小豬 2021-07-09 14:43:28
我正在編寫一個 util 函數(shù),以根據(jù)我傳入的任何 HQL 獲取總記錄數(shù),而無需加載所有數(shù)據(jù)。傳入的 HQL 可能非常復(fù)雜,有很多選擇、連接、條件、分組和排序。為此,我想用SELECT COUNT(*) FROM (<ORIGINAL_QUERY>) x. 我發(fā)現(xiàn),這在 HQL 中是不可能的,因為 Hibernate 不允許在 FROM 元素中進行子查詢?,F(xiàn)在,我正在嘗試將這個隨機的 HQL 查詢轉(zhuǎn)換為一個可執(zhí)行的 SQL 語句,其中可能有一些命名參數(shù)(其中一些可能是簡單參數(shù),一些可能是列表),而無需內(nèi)聯(lián)參數(shù)值。這似乎適用于簡單參數(shù),但不適用于列表參數(shù)。hqlString 和 namedParameterMap 來自外面的某個地方:final String hqlString = "...";final Map<String, Object> namedParametersMap = ...;將 HQL 轉(zhuǎn)換為 SQL(和 ParameterTranslations:final QueryTranslatorFactory translatorFactory = new ASTQueryTranslatorFactory();final SessionFactoryImplementor factory = getSessionFactory();final QueryTranslator translator = translatorFactory.createQueryTranslator(hqlString, hqlString, Collections.EMPTY_MAP, factory, null);translator.compile(Collections.EMPTY_MAP, false);final String sqlString = translator.getSQLString();final ParameterTranslations parameterTranslations = translator.getParameterTranslations());創(chuàng)建 SQLQuery、設(shè)置參數(shù)并執(zhí)行查詢的代碼:SQLQuery sqlQuery = getCurrentSession().createSQLQuery(sqlString);((Set<?>) parameterTranslations.getNamedParameterNames()).forEach(parameterName -> {    for (int position : parameterTranslations.getNamedParameterSqlLocations(parameterName)) {        sqlQuery.setParameter(position, namedParametersMap.get(parameterName));    }});final Long rowCount = ((BigInteger) query.uniqueResult()).longValueExact();此查詢按預(yù)期工作:final String hqlString = "SELECT p.firstname, p.surname FROM Person p WHERE p.id = :param1";final Map<String, Object> namedParametersMap = Maps.newHashMap(ImmutableMap.<String, Object>of("param1", Integer.valueOf(1));此查詢不起作用:String hqlString = "SELECT p.firstname, p.surname FROM Person p WHERE p.id IN (:param1)";final Map<String, Object> namedParametersMap = Maps.newHashMap(ImmutableMap.<String, Object>of("param1", Lists.newArrayList(Integer.valueOf(1)));
查看完整描述

2 回答

?
交互式愛情

TA貢獻1712條經(jīng)驗 獲得超3個贊

可以直接用sql


     String sql="your query"

     Query query = sessionFactory.getCurrentSession().createSQLQuery(sql);

                query.setParameter("paramterName", parameterValue);

                List<Object[]> resultSet = query.list();


     List<YouClass > data= new ArrayList<>();

          for (Object[] row : resultSet) {

                YouClass yourObject=new YouClass ();

                yourObject.setDate((Date) row[0]);

                yourObject.setAmount((BigDecimal) row[1]);

                data.add(yourObject);

            }

假設(shè) Yourclass 有兩個元素 date 和 amount


查看完整回答
反對 回復(fù) 2021-07-14
?
喵喵時光機

TA貢獻1846條經(jīng)驗 獲得超7個贊

在 HQL 中,您可以使用查詢參數(shù)并使用 setParameterList 方法設(shè)置集合。


Query q = session.createQuery("SELECT entity FROM Entity entity WHERE name IN (:names)");

q.setParameterList("names", names);


查看完整回答
反對 回復(fù) 2021-07-14
  • 2 回答
  • 0 關(guān)注
  • 320 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號