小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

如何使用二級(jí)緩存將JPA DAO遷移到Spring Data?

 印度阿三17 2019-10-28

我有一堆希望遷移到Spring Data JPA的JPA DAO.我的某些DAOS具有第二級(jí)/查詢緩存設(shè)置.

我有一個(gè)過(guò)程,我只在查詢中檢索ID,然后使用findByID()查找實(shí)體.這樣,只有ID會(huì)在不同的查詢緩存中相乘,而整個(gè)實(shí)體都在第二級(jí)緩存中.

例:

@NamedQuery(name = "SystemUser.findByEmail",
            query = "SELECT u.id FROM SystemUser u WHERE email=:email"),
…

public SystemUser findByEmail(String email) {

    TypedQuery<Long> q = getEntityManager().createNamedQuery("SystemUser.findByEmail", Long.class);
    q.setParameter("email", email);
    q.setHint("org.hibernate.cacheable", true);
    q.setHint("org.hibernate.cacheRegion", "query.systemUser");

    List<Long> res = q.getResultList();

    if (res != null && res.size() > 0) {
        return findById(res.get(0));
    }

    return null;
}

我還有更多的findBy…方法,所有方法都是這樣.感覺(jué)這是降低緩存內(nèi)存消耗的好方法.

我是Spring Data JPA業(yè)務(wù)的新手,但是我看不到如何在這里實(shí)現(xiàn)它? @Cacheable批注似乎只處理查詢緩存,對(duì)我而言,這些副本將復(fù)制每個(gè)查詢緩存中的實(shí)體嗎?

Spring Data有什么辦法做到這一點(diǎn)?指針將不勝感激.

解決方法:

在Spring Data JPA中,只需創(chuàng)建一個(gè)findByEmail方法,Spring Data JPA就會(huì)找到您的命名查詢或自行創(chuàng)建一個(gè)查詢.

public class SystemUserRepository extends CrudRepository<SystemUser, Long> {

    SystemUser findByEmail(String email);
}

應(yīng)該是執(zhí)行查詢和所需結(jié)果所需要的.現(xiàn)在使用@QueryHints,您可以添加您現(xiàn)在設(shè)置的提示.

public class SystemUserRepository extends CrudRepository<SystemUser, Long> {

    @QueryHints(
        @QueryHint(name="org.hibernate.cacheable", value="true"),
        @QueryHint(name="org.hibernate.cacheRegion", value="query.systemUser")        )
    SystemUser findByEmail(String email);
}

結(jié)果將被緩存,而用戶仍然來(lái)自第二級(jí)緩存(如果可用,則創(chuàng)建其他).假設(shè)您的實(shí)體當(dāng)然是@Cacheable.

可以找到有關(guān)07個(gè)不同緩存如何一起工作的很好的讀物here.有關(guān)查詢緩存如何工作的小片段.

The query cache looks conceptually like an hash map where the key is composed by the query text and the parameter values, and the value is a list of entity Id’s that match the query:

如果您想要更復(fù)雜的邏輯(并真正實(shí)現(xiàn)您所做的優(yōu)化),則始終可以實(shí)現(xiàn)own repository.

來(lái)源:https://www./content-4-529601.html

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類(lèi)似文章 更多