首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果在实体中添加或删除列,则使缓存无效(2LD缓存休眠)。(reddison)

如果在实体中添加或删除列,则使缓存无效(2LD缓存休眠)。(reddison)
EN

Stack Overflow用户
提问于 2021-07-03 21:44:29
回答 1查看 156关注 0票数 0

当我在一个实体中添加或删除一个列时,“旧”实体已经在缓存中,而我现在想要加载“新”实体,我得到一个错误。我在Hibernate中使用Redisson作为2LD缓存。

“旧”实体:

代码语言:javascript
复制
public class TestEntity implements Serializable {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "p_id", updatable = false, unique = true, nullable = false)
private Long id;

@NaturalId
@Column(name = "p_uuid")
private String uuid;

@Column(name = "p_name")
private String name;

@Column(name = "test_int")
private int test;
}

“新建”实体:

代码语言:javascript
复制
public class TestEntity implements Serializable {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "p_id", updatable = false, unique = true, nullable = false)
private Long id;

@NaturalId
@Column(name = "p_uuid")
private String uuid;

@Column(name = "p_name")
private String name;

@Column(name = "test_int")
private int test;

@Column(name = "bool")
private boolean bool; //new column
}

错误:

org.hibernate.type.TypeHelper.assemble(TypeHelper.java:97) at org.hibernate.cache.spi.entry.StandardCacheEntryImpl.assemble(StandardCacheEntryImpl.java:135) at org.hibernate.loader.entity.CacheEntityLoaderHelper.convertCacheEntryToEntity(CacheEntityLoaderHelper.java:308) at org.hibernate.loader.entity.CacheEntityLoaderHelper.processCachedEntry(CacheEntityLoaderHelper.java:174) at org.hibernate.loader.entity.CacheEntityLoaderHelper.loadFromSecondLevelCache(CacheEntityLoaderHelper.java:147) at org.hibernate.event.internal.DefaultLoadEventListener.的java.lang.ArrayIndexOutOfBoundsException:长度3的索引3越界org.hibernate.event.internal.DefaultLoadEventListener.load(DefaultLoadEventListener.java:208) at org.hibernate.event.internal.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:327) at org.hibernate.event.internal.DefaultLoadEventListener.doOnLoad(DefaultLoadEventListener.java:108) at org.hibernate.event.internal.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:74) at org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:118) at org.hibernate.internal.SessionImpl.fireLoadNoChecks(SessionImpl.java:的doLoad(DefaultLoadEventListener.java:523)1215at org.hibernate.internal.SessionImpl.fireLoad(SessionImpl.java:1204) at org.hibernate.internal.SessionImpl.access$2100(SessionImpl.java:203) at org.hibernate.internal.SessionImpl$IdentifierLoadAccessImpl.doLoad(SessionImpl.java:2819) at org.hibernate.internal.SessionImpl$IdentifierLoadAccessImpl.lambda$load$1(SessionImpl.java:2796) at org.hibernate.internal.SessionImpl$IdentifierLoadAccessImpl.perform(SessionImpl.java:2752) at org.hibernate.internal.SessionImpl$IdentifierLoadAccessImpl.load(SessionImpl.java:2796) at org.hibernate.internal.SessionImpl$SimpleNaturalIdLoadAccessImpl.load(SessionImpl.java:3241) at

我也不想从缓存中清除实体,因为它不会做任何事情,因为我有几个应用程序同时运行,而且总是会发生它们没有最新实体的情况,为了保证高可用性,我不能总是重新启动它们。没有redisson缓存,它当然可以工作,但出于性能原因,我想使用二级缓存。有没有人有关于如何最好地处理这个问题的建议?

Hibernate-版本:5.5.2 Version

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-07 20:40:05

这个问题似乎最近才被问到:https://discourse.hibernate.org/t/hibernate-second-level-cache-no-fallback-to-db-if-deserialization-fails/5516

目前还没有办法处理这个问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68236818

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档