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

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

如何從Hibernate Criteria API獲取SQL(*不*用于記錄)

如何從Hibernate Criteria API獲取SQL(*不*用于記錄)

吃雞游戲 2019-10-08 10:54:01
有沒(méi)有一種簡(jiǎn)單的方法可以從休眠條件中獲取(待生成的)SQL?理想情況下,我會(huì)像這樣:Criteria criteria = session.createCriteria(Operator.class);... build up the criteria ...... and then do something like ...String sql = criteria.toSql()(But this of course does not exist)然后的想法是將sql用作巨大的“ MINUS”查詢的一部分(我需要找到2個(gè)相同模式之間的差異-結(jié)構(gòu)相同,而不是數(shù)據(jù)相同-并且Hibernate不支持MINUS)(順便說(shuō)一句,我知道我可以從日志文件中檢查SQL)
查看完整描述

3 回答

?
慕姐4208626

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

我已經(jīng)使用Spring AOP完成了這樣的事情,因此我可以獲取應(yīng)用程序中運(yùn)行的任何查詢的sql,參數(shù),錯(cuò)誤和執(zhí)行時(shí)間,無(wú)論是HQL,Criteria還是本機(jī)SQL。


這顯然是脆弱,不安全的,可能會(huì)因Hibernate中的更改而中斷,等等,但它說(shuō)明可以獲取SQL:


CriteriaImpl c = (CriteriaImpl)query;

SessionImpl s = (SessionImpl)c.getSession();

SessionFactoryImplementor factory = (SessionFactoryImplementor)s.getSessionFactory();

String[] implementors = factory.getImplementors( c.getEntityOrClassName() );

CriteriaLoader loader = new CriteriaLoader((OuterJoinLoadable)factory.getEntityPersister(implementors[0]),

    factory, c, implementors[0], s.getEnabledFilters());

Field f = OuterJoinLoader.class.getDeclaredField("sql");

f.setAccessible(true);

String sql = (String)f.get(loader);

嘗試將所有物品包裝起來(lái)并使用,后果自負(fù)。


查看完整回答
反對(duì) 回復(fù) 2019-10-08
?
MM們

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

這是獲取SQL的“另一種”方法:


CriteriaImpl criteriaImpl = (CriteriaImpl)criteria;

SessionImplementor session = criteriaImpl.getSession();

SessionFactoryImplementor factory = session.getFactory();

CriteriaQueryTranslator translator=new CriteriaQueryTranslator(factory,criteriaImpl,criteriaImpl.getEntityOrClassName(),CriteriaQueryTranslator.ROOT_SQL_ALIAS);

String[] implementors = factory.getImplementors( criteriaImpl.getEntityOrClassName() );


CriteriaJoinWalker walker = new CriteriaJoinWalker((OuterJoinLoadable)factory.getEntityPersister(implementors[0]), 

                        translator,

                        factory, 

                        criteriaImpl, 

                        criteriaImpl.getEntityOrClassName(), 

                        session.getLoadQueryInfluencers()   );


String sql=walker.getSQLString();


查看完整回答
反對(duì) 回復(fù) 2019-10-08
  • 3 回答
  • 0 關(guān)注
  • 1034 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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