我在科特林有以下课程
@Entity
@Cacheable
@Table(name = "fine")
@EntityListeners(FineSpecificationListener::class)
class FineSpecification (
@EmbeddedId
val id: FineSpecificationId,
@Column(name = "fine")
val fine: Int,
@Column(name = "min_fine")
val minimumFine: Int
): ValueObject<FineSpecification> {
@Transient
lateinit var algorithm: FineCalculationAlgorithm
override fun sameValueAs(other: FineSpecification): Boolean {
return Objects.equal(id, other.id) &&
Objects.equal(fine, other.fine) &&
Objects.equal(minimumFine, other.minimumFine)
}
override fun equals(other: Any?): Boolean {
if (other == null || this::class != other::class)
return false
val compareTo = other as FineSpecification
return sameValueAs(compareTo)
}
override fun hashCode(): Int {
return Objects.hashCode(id, fine, minimumFine)
}
override fun toString(): String {
return "FineSpecification(id=$id, fine=$fine, minimumFine=$minimumFine)"
}
fun calculateFine(dues: Long, dueDate: Date, currentDate: Date): Long {
return algorithm.calculateFine(arrears = dues, dueDate = dueDate, currentDate = currentDate)
}
}
class FineSpecificationId (
@Column(name = "effect_from")
val effectFrom: Date,
@Column(name = "effect_to")
val effectTo: Date,
@Column(name = "cat_code")
@Convert(converter = CategoryConverter::class)
val category: Category
): Serializable {
companion object {
private const val serialVersionUID = 20190819075136L
}
override fun toString(): String {
return "FineSpecificationId(effectFrom=$effectFrom, effectTo=$effectTo, category=$category)"
}
}
enum class Category (
val code: String
): Serializable {
DOMESTIC("D"),
NON_DOMESTIC("N"),
INDUSTRIAL("I"),
SPECIAL("S");
companion object {
private const val serialVersionUID = 20190819075150L
}
override fun toString(): String {
return code
}
}
我正在将Spring Data与Hibernate一起使用,并使用hibernate ehcache。我想缓存FineSpecification,但是当我这样做时,出现了以下异常
18 Aug 2019; 18:56:50.563 ERROR n.s.e.store.disk.DiskStorageFactory - Disk Write of domain.model.bill.fine.FineSpecification#FineSpecificationId(effectFrom=Thu Apr 01 00:00:00 IST 1999, effectTo=Thu Dec 31 00:00:00 IST 2020, category=D) failed:
java.io.NotSerializableException: org.hibernate.metamodel.model.convert.internal.JpaAttributeConverterImpl
据我所知,它与FineSpecificationId
以及Category
枚举类有关。我已经实现了Serializable
接口,但是没有任何效果。
在这种情况下,我应该怎么做才能实现缓存?