当我在一个实体中添加或删除一个列时,“旧”实体已经在缓存中,而我现在想要加载“新”实体,我得到一个错误。我在Hibernate中使用Redisson作为2LD缓存。
“旧”实体:
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;
}“新建”实体:
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
发布于 2021-07-07 20:40:05
https://stackoverflow.com/questions/68236818
复制相似问题