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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

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

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

猛跑小豬 2021-07-09 14:43:28
我正在編寫(xiě)一個(gè) util 函數(shù),以根據(jù)我傳入的任何 HQL 獲取總記錄數(shù),而無(wú)需加載所有數(shù)據(jù)。傳入的 HQL 可能非常復(fù)雜,有很多選擇、連接、條件、分組和排序。為此,我想用SELECT COUNT(*) FROM (<ORIGINAL_QUERY>) x. 我發(fā)現(xiàn),這在 HQL 中是不可能的,因?yàn)?Hibernate 不允許在 FROM 元素中進(jìn)行子查詢(xún)?,F(xiàn)在,我正在嘗試將這個(gè)隨機(jī)的 HQL 查詢(xún)轉(zhuǎn)換為一個(gè)可執(zhí)行的 SQL 語(yǔ)句,其中可能有一些命名參數(shù)(其中一些可能是簡(jiǎn)單參數(shù),一些可能是列表),而無(wú)需內(nèi)聯(lián)參數(shù)值。這似乎適用于簡(jiǎn)單參數(shù),但不適用于列表參數(shù)。hqlString 和 namedParameterMap 來(lái)自外面的某個(gè)地方: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í)行查詢(xún)的代碼: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();此查詢(xún)按預(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));此查詢(xún)不起作用: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 回答

?
交互式愛(ài)情

TA貢獻(xiàn)1712條經(jīng)驗(yàn) 獲得超3個(gè)贊

可以直接用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 有兩個(gè)元素 date 和 amount


查看完整回答
反對(duì) 回復(fù) 2021-07-14
?
喵喵時(shí)光機(jī)

TA貢獻(xiàn)1846條經(jīng)驗(yàn) 獲得超7個(gè)贊

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


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

q.setParameterList("names", names);


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

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

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

公眾號(hào)

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