关于如何使用它的JPA Cacheable具体示例

时间:2014-03-13 19:33:12

标签: java hibernate jpa

我是JPA的新手,并且已经阅读了一些关于JPA中二级缓存的内容。而且我认为它应该适用于我的场景。 我有一个表(比如说A),除非应用新版本,否则其内容永远不会改变。 我需要从数据库中查询一些数据:为此,我有一个正确的JPQL工作,并使用表A和另一个表(比如说B)之间的连接。

由于表A的内容从未在应用程序的生命周期中发生变化,因此我基本上可以将此表A标记为可缓存并重用Cache中的内容 - 而不是转到数据库。

我已经阅读了@NamedQuery,它可以在应用程序的生命周期内进行一次JPQL到SQL的翻译。这不是我要找的东西。

我想知道如何为我的目的使用Cacheable属性。

这是我到目前为止所做的:

  1. 将已标记的表格A视为可缓存 -

    @Entity @Cacheable @Table(name = "TableA") public class Table{

    @Id
    @NotNull
    @Column(updatable = false)
    private String uuid;
    
    @NotNull
    @Size(min = 1)
    private String description;
    

    . . . }

  2. @Id @NotNull @Column(updatable = false) private String uuid; @NotNull @Size(min = 1) private String description;

    2.有一个使用JPQL查找的DAO -     


    public Collection findAll(String description) { final Cache cache = entityManager.getEntityManagerFactory().getCache(); if (cache.contains(TableA.class, "abc")) { System.out.println("cached"); } else { System.out.println("not cached"); } final Query query = entityManager .createQuery("Select distinct A from TableA A, IN(A.TableB) B where A.description = :description"); //$NON-NLS-1$ query.setParameter("description", description); //$NON-NLS-1$
    
    
    

    我是否可以在我的方案中使用Cacheable属性。如果是这样,那你可以建议怎么做? 此外,"没有缓存"无论我使用的字符串值(来自表格)代替" abc"。

    感谢您的帮助。感谢

0 个答案:

没有答案