You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Blaze Persistence实体视图集合类型重映射问题求助

解决方案

问题出在@MappingIndex的属性路径未关联到集合元素的属性上。Blaze Persistence默认会从主实体(ConfigurationEntity)查找指定属性,而你需要从关联的DescriptionEntity中获取属性,因此需要明确指定集合元素的属性路径,或通过@Mapping先绑定目标集合,再用@MappingIndex指定元素的键属性。

正确的实体视图写法

要实现将List<DescriptionEntity>转为以language为键的Map<String, DescriptionView>,需按以下方式编写:

  1. 用@Mapping指定Map对应的源集合(descriptions)
  2. 用@MappingIndex指定集合元素(DescriptionEntity)的键属性路径(identifier.language)

完整代码示例:

@EntityView(ConfigurationEntity.class)
public interface InstitutionView {
    @IdMapping(value = "institution")
    UUID getIdentifier();

    // 可选:保留原List映射
    List<DescriptionView> getDescriptions();

    @Mapping("descriptions")
    @MappingIndex("identifier.language")
    Map<String, DescriptionView> getDescriptionMap();
}

关键说明

  • @Mapping("descriptions"):告知Blaze Persistence该Map是基于主实体的descriptions集合转换而来
  • @MappingIndex("identifier.language"):指定使用集合元素(DescriptionEntity)中identifier嵌入类的language属性作为Map的键

额外修正:实体关联类型错误

你的DescriptionEntity中configuration字段的类型写为InstitutionConfigurationEntity,但主实体类是ConfigurationEntity,这是笔误会导致Hibernate关联失败,需修正为:

@ManyToOne(fetch = FetchType.LAZY)
@MapsId("identifier_institution")
@JoinColumn(name = "identifier_institution")
private ConfigurationEntity configuration;

内容的提问来源于stack exchange,提问作者Hickory

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 21:30:56