Java SpringDataJPA—如何缓存实体,它包含在许多其他实体中
我使用SpringDataJPA从存储库中获取实体。我有一个名为Category的特定实体,它可以包含在Offer、Project和User中。每次我从JpaRepository加载其中一些实体时,Spring都会发出其他请求来获取类别。因此,合作伙伴实体如下所示:Java SpringDataJPA—如何缓存实体,它包含在许多其他实体中,java,spring,kotlin,spring-data-jpa,spring-cache,Java,Spring,Kotlin,Spring Data Jpa,Spring Cache,我使用SpringDataJPA从存储库中获取实体。我有一个名为Category的特定实体,它可以包含在Offer、Project和User中。每次我从JpaRepository加载其中一些实体时,Spring都会发出其他请求来获取类别。因此,合作伙伴实体如下所示: @Entity class Project(...) { constructor() : this(...) @Id var id: String = IDGenerator.longId() @
@Entity
class Project(...) {
constructor() : this(...)
@Id
var id: String = IDGenerator.longId()
@ManyToMany
var categories: MutableList<Category> = mutableListOf()
@ManyToOne
var mainCategory: Category? = null
//other fiels
}
@Entity
class Category(var name: String,
var icon: String) {
constructor() : this("", "")
@Id
var id: String = IDGenerator.longId()
var marker: String = "default-category.png"
@ElementCollection
var defaultImg: MutableList<String> = mutableListOf("default.jpg")
}
@实体
类项目(…){
构造函数():此(…)
@身份证
变量id:String=IDGenerator.longId()
@许多
变量类别:MutableList=mutableListOf()
@许多酮
var mainCategory:类别?=null
//其他领域
}
类别如下所示:
@Entity
class Project(...) {
constructor() : this(...)
@Id
var id: String = IDGenerator.longId()
@ManyToMany
var categories: MutableList<Category> = mutableListOf()
@ManyToOne
var mainCategory: Category? = null
//other fiels
}
@Entity
class Category(var name: String,
var icon: String) {
constructor() : this("", "")
@Id
var id: String = IDGenerator.longId()
var marker: String = "default-category.png"
@ElementCollection
var defaultImg: MutableList<String> = mutableListOf("default.jpg")
}
@实体
类类别(变量名称:String,
变量图标:字符串){
构造函数():此(“,”)
@身份证
变量id:String=IDGenerator.longId()
var marker:String=“default category.png”
@元素集合
var defaultImg:MutableList=mutableListOf(“default.jpg”)
}
如何缓存类别并使其不从数据库中按ID加载
另外,项目中大约有40-50个类别。您想使用hibernate“二级缓存”
1向pom添加一个二级缓存库。我更喜欢ehcache,但你可以用其他的
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-ehcache</artifactId>
<!--Your hibernate version-->
<version>5.2.2.Final</version>
</dependency>
3向实体添加@Cacheable注释
@Entity
@Cacheable
class Category(...){
.........
}
这是所有的开始。该类别将从数据库中读取一次,并存储在二级缓存中。下一次Hibernate将从那里获取它,而不需要任何新的“select from”