我是JPA的新手,并且已经阅读了一些关于JPA中二级缓存的内容。而且我认为它应该适用于我的场景。 我有一个表(比如说A),除非应用新版本,否则其内容永远不会改变。 我需要从数据库中查询一些数据:为此,我有一个正确的JPQL工作,并使用表A和另一个表(比如说B)之间的连接。
由于表A的内容从未在应用程序的生命周期中发生变化,因此我基本上可以将此表A标记为可缓存并重用Cache中的内容 - 而不是转到数据库。
我已经阅读了@NamedQuery,它可以在应用程序的生命周期内进行一次JPQL到SQL的翻译。这不是我要找的东西。
我想知道如何为我的目的使用Cacheable属性。
这是我到目前为止所做的:
将已标记的表格A视为可缓存 -
@Entity
@Cacheable
@Table(name = "TableA")
public class Table{
@Id
@NotNull
@Column(updatable = false)
private String uuid;
@NotNull
@Size(min = 1)
private String description;
.
.
.
}
@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"。
感谢您的帮助。感谢