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

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

Hibernate Search:從查詢中獲取參數(shù)化結(jié)果,沒有未經(jīng)檢查的警告

Hibernate Search:從查詢中獲取參數(shù)化結(jié)果,沒有未經(jīng)檢查的警告

小唯快跑啊 2021-12-22 19:16:15
是否可以從查詢中獲得參數(shù)化結(jié)果而沒有在休眠搜索中未經(jīng)檢查的警告?在 Hibernate ORM (5.3.7.Final) 中,可以編寫以下代碼而沒有任何未經(jīng)檢查的警告:List<Entity> result = session.createQuery("from Entity", Entity.class).list();但是在 Hibernate Search (5.10.4.Final) 中,我目前無法獲得參數(shù)化結(jié)果,即使Entity.class在創(chuàng)建和執(zhí)行查詢期間指定了兩次:QueryBuilder queryBuilder = fullTextSession                .getSearchFactory()                .buildQueryBuilder()                .forEntity(Entity.class)                .get();org.apache.lucene.search.Query luceneQuery = queryBuilder                .keyword()                .onField("field")                .matching("value")                .createQuery();Query query = fullTextSession.createFullTextQuery(luceneQuery, Entity.class);List result = query.list();當(dāng)然,我可以寫一些類似的東西:Query<Entity> query = fullTextSession.createFullTextQuery(luceneQuery, Entity.class);List<Entity> result = query.list();但這是一個(gè)未經(jīng)檢查的任務(wù)?;蛘呶铱梢詫慙ist<Entity> parametrisedResult = (List<Entity>) result;但在這里我有一個(gè)未經(jīng)檢查的演員。由于 Hibernate ORM 有這種可能性,我假設(shè)在 Hibernate Search 中也可以編寫沒有未經(jīng)檢查的警告的代碼。提前致謝。
查看完整描述

1 回答

?
PIPIONE

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

不,目前無法實(shí)例化類型安全FullTextQuery(原因如下)。推薦的方法是這種方法,它適用于 Search 5.10 以及較舊的(5.7 之前的)版本:


QueryBuilder queryBuilder = fullTextSession

                .getSearchFactory()

                .buildQueryBuilder()

                .forEntity(Entity.class)

                .get();

org.apache.lucene.search.Query luceneQuery = queryBuilder

                .keyword()

                .onField("field")

                .matching("value")

                .createQuery();


FullTextQuery query = fullTextSession.createFullTextQuery(luceneQuery, Entity.class);

List<Entity> result = (List<Entity>) query.list();

為什么?

根據(jù) ORM 標(biāo)準(zhǔn),創(chuàng)建類型安全查詢的能力是相當(dāng)新的:它隨 JPA 2.1 (ORM 5.2) 提供。在此之前,該list()方法用于List在 ORM 中返回原始(沒有泛型類型參數(shù)),在 Hibernate Search 查詢中也是如此。


Hibernate Search 并沒有更改為遵循 ORM,但是:作為原始類型FullTextQuery擴(kuò)展org.hibernate.query.Query,沒有任何參數(shù)。原因是,F(xiàn)ullTextQuery對(duì)象上有允許更改返回對(duì)象的修改器,從而更改返回的類型(特別是setProjection方法)。因此,即使我們可以FullTextQuery<Entity>在構(gòu)建查詢時(shí)返回 a ,這也會(huì)產(chǎn)生誤導(dǎo),因?yàn)樵谀承┣闆r下,您最終可能會(huì)FullTextQuery<Entity>得到實(shí)際返回類型為 的結(jié)果的 a List<Object[]>。


我們探索了幾個(gè)選項(xiàng)來解決這種情況,但找不到既能保證類型安全又能保持向后兼容性的解決方案。所以我們?cè)?Hibernate Search 5 中放棄了這個(gè)。


如果您想知道,ORM 沒有同樣的問題,因?yàn)槟趧?chuàng)建查詢時(shí)指定了您希望查詢返回的確切類型,并且之后無法更改它。


但是,在 Hibernate Search 的下一個(gè)專業(yè)版本 6 中,這將得到解決。新的查詢構(gòu)建 API 需要在您創(chuàng)建查詢之前指定查詢將返回托管實(shí)體還是索引投影。Hibernate Search 6 還不穩(wěn)定,還沒有準(zhǔn)備好投入生產(chǎn),但如果你很好奇,你可以在這里找到一個(gè)例子(asEntity調(diào)用告訴 Search 返回類型應(yīng)該是什么)。


查看完整回答
反對(duì) 回復(fù) 2021-12-22
  • 1 回答
  • 0 關(guān)注
  • 263 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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