栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

org.hibernate.engine.loading.internal.CollectionLoadContext@6b6f68cdrs=com.alibaba.druid.pool.Druid?

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

org.hibernate.engine.loading.internal.CollectionLoadContext@6b6f68cdrs=com.alibaba.druid.pool.Druid?

org.hibernate.engine.loading.internal.CollectionLoadContext@6b6f68cdrs=com.alibaba.druid.pool.Druid?(栈溢出、空指针问题) 问题描述

今天在项目中同时使用 lombok 中的 @Data 注解与 hibernate 时出现了一个bug

在运行的时候报错 org.hibernate.engine.loading.internal.CollectionLoadContext@6b6f68cdrs=com.alibaba.druid.pool.Druid?

@Data
@NoArgsConstructor
@Entity
@Table(name = "sys_user")
public class User extends BaseEntity {
    
    @Id
    @GeneratedValue(generator = "nativeStrategy")
    @GenericGenerator(name = "nativeStrategy", strategy = "native")
    private Integer id;
    
    .....
        
    
    @OneToMany(mappedBy = "user", cascade = CascadeType.REMOVE, fetch = FetchType.LAZY)
    private Set userRoles = new HashSet();
    
    .....
}

问题处理

问题定位:查阅了一些资料,其实这里为什么报这个错,是 @Data 注解的问题

问题原因:@Data 注解包含了 @Getter、@Setter、@RequiredArgsConstructor、@ToString、@EqualsAndHashCode等注解,即使用当前注解时会自动生成包含的这五个注解对应所有方法,正是这里的 @EqualsAndHashCode 是问题所在。不了解 lombok 的可以查看 lombok 的使用

问题依据:

官网 lombok hashandcode 有这么一段文字

翻译过来是:数组是"深度"比较/hashCoded,这意味着包含自己的数组将导致StackOverflowError

而在上述的 User 类中,有一个 Set 类型 userRoles 字段,正是导致了这个问题

问题处理:

1、去除 @Data 注解,根据使用,我这边替换成了 @Getter 与 @Setter (无需 @EqualsAndHashCode)

2、若需要equals 与 hashCode,自己在 User类中重写 hashCode 与 equals 方法即可,不用其默认实现的方式进行比较

@Override
public int hashCode() {
	// 自己的实现
    return super.hashCode();
}

@Override
public boolean equals(Object obj) {
    // 自己的实现
    return super.equals(obj);
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/857767.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号