如何在JPA/Hibernate中将实体关联集合转换为原始ID集合?
解决方案
你不能用@ManyToMany映射基本类型集合,这个注解仅适用于实体间的多对多关联。要实现保留game_id集合、复用现有数据库表且删除Game实体的需求,应该使用@ElementCollection配合@CollectionTable来配置:
@Entity public class Account { @Id private Long id; @ElementCollection(fetch = FetchType.LAZY) @CollectionTable( name = "account_games", joinColumns = @JoinColumn(name = "account_id") ) @Column(name = "game_id") private Set<Long> gameIds = new HashSet<>(); }
关键注解解析
@ElementCollection:用于映射基本类型或嵌入式类的集合,替代原本用于实体关联的@ManyToMany@CollectionTable:指定集合数据存储的数据库表,这里直接复用已存在的account_games表,joinColumns配置关联当前Account实体的外键account_id@Column(name = "game_id"):明确集合元素对应的数据库列名,对应原表中的game_id字段
配置完成后,ORM框架会直接操作account_games表维护gameIds集合,无需保留Game实体,也不需要修改现有数据库结构。
内容的提问来源于stack exchange,提问作者Stanislav Markin
相关产品推荐
相关产品推荐

