Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SpringDataJPA—如何缓存实体,它包含在许多其他实体中_Java_Spring_Kotlin_Spring Data Jpa_Spring Cache - Fatal编程技术网

Java SpringDataJPA—如何缓存实体,它包含在许多其他实体中

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() @

我使用SpringDataJPA从存储库中获取实体。我有一个名为Category的特定实体,它可以包含在Offer、Project和User中。每次我从JpaRepository加载其中一些实体时,Spring都会发出其他请求来获取类别。因此,合作伙伴实体如下所示:

@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”