Spring Data保存实体后一对多关联集合为空的问题求助
Spring Data保存实体后一对多关联集合为空的问题求助
大家好,我最近在使用Spring Data JPA开发时碰到了一个棘手的问题:当我保存TagInfo实体后,它关联的users集合始终是空的,明明数据库里的关联表已经有数据了,就是加载不出来,想请各位大佬帮忙排查下问题所在。
先贴一下相关代码:
首先是成员类型的枚举:
public enum TagMembershipType { USER, OWNER }
然后是核心的TagInfo实体类,我用了两个@OneToMany注解来关联TagMembership,并通过@WhereJoinTable按成员类型过滤:
@Entity @Table(name = "tags") @Data @EqualsAndHashCode(onlyExplicitlyIncluded = true, callSuper = true) public class TagInfo { @Id @GeneratedValue(strategy = IDENTITY) @ToString.Include private Integer tagId; @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true) @JoinTable( name = "tag_membership", joinColumns = @JoinColumn(name = "tagId", referencedColumnName = "tagId") ) @WhereJoinTable(clause = "member_type = 0") // 对应USER枚举的ordinal值 private List<TagMembership> users = new ArrayList<>(); @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true) @JoinTable( name = "tag_membership", joinColumns = @JoinColumn(name = "tagId", referencedColumnName = "tagId") ) @WhereJoinTable(clause = "member_type = 1") // 对应OWNER枚举的ordinal值,原代码此处截断,我补充了逻辑 private List<TagMembership> owners = new ArrayList<>(); // 其他字段和方法已省略 }
具体问题场景:
我创建TagInfo实例后,往users集合里添加了几个TagMembership对象,调用tagInfoRepository.save(tagInfo)成功保存后,数据库的tag_membership表也确实插入了对应的记录,member_type字段值也正确是0,但当我重新从数据库查询这个TagInfo实体时,users集合却是空的,完全加载不到关联数据。
我已经排查过的点:
- 数据库中外键关联正常,
tagId和tags表的主键对应无误 - 确认了
@WhereJoinTable的clause值和枚举的ordinal是匹配的(USER是0,OWNER是1) - 尝试过在查询时使用
fetch join,但结果还是一样,集合为空
有没有朋友遇到过类似的情况?或者能帮我看看我的映射配置哪里出错了吗?非常感谢!
备注:内容来源于stack exchange,提问作者Lesha Pipiev
相关产品推荐
相关产品推荐

